2

我有一个多模块 ant+ivy 项目。项目之间的依赖关系记录在 ivy.xml 文件中。

<ivy:retrieve>被调用时,它将尝试下载所有依赖项,包括本地项目。

如何从检索中排除我的本地项目?

或者也许有可能使用文件系统解析器,使其解析为${projects.dir}/*/ivy.xml,就像 IvyDE 对工作区解析器所做的那样。

更新

我只想排除本地项目,仍要检索它们的传递依赖项。我需要复制 IvyDE 工作区解析器的行为,但在 Eclipse 之外。

例子

给定项目结构:

  • 项目/
    • local.module1/
      • 垃圾桶/
      • 库/
      • 构建.xml
      • 常春藤.xml
        • <dependency org="local" name="local.module2" />
    • local.module2/
      • 垃圾桶/
      • 库/
      • 构建.xml
      • 常春藤.xml
        • <dependency org="external" name="library1" />
    • common.xml
    • 构建.xml

我希望local.module1能够检索除本地项目(local.module2)之外的所有传递依赖项(local.module2,external.library1),因此有效地留下了external.library1.

由此我想构建由对本地项目的直接引用和对外部库的 jar 引用组成的构建类路径。在模块 1 的情况下:

  • ../local.module2/bin
  • lib/external.library1-1.0.jar

万一有人想知道为什么 - 我正在尝试以最小的更改将常春藤融入现有的构建系统。

4

2 回答 2

0

在您的ivy.xml文件中,添加排除实体。

<dependency org="com.vegicorp"   name="flubaster"    
    conf="compile->default"   rev="3.3">
    <exclude org="com.local"/>
</dependency

这将阻止您在存储本地 jar 文件时从“com.local”或您的组织中下载任何内容。

(除非您正在谈论这个特定项目的 jar,如果是这种情况,它们根本不应该在您的ivy.xml文件中)。

于 2013-07-11T19:50:43.453 回答
0

我最近遇到了同样的问题,即部分 ivy 集成到遗留项目中,只是为了从 maven 世界中获取一些传递依赖项,同时保留现有的 ant 构建过程。还必须通过使用解析为虚拟 jar 的假本地文件系统解析器来避免使用 ivy 发布项目模块。

常春藤设置.xml

<ivysettings>
    <settings defaultResolver="default">
        <property name="local.maven2.dir" value="${user.home}/.m2/repository/" override="false"/>
        <property name="local-project.cache.dir" value="${ivy.settings.dir}/cache" override="false"/>
    </settings>
    <caches resolutionCacheDir="${local-project.cache.dir}" lockStrategy="artifact-lock" useOrigin="true">
        <cache name="local-project" basedir="${local-project.cache.dir}" useOrigin="true"/>
    </caches>
    <resolvers>
        <chain name="default">
            <filesystem name="local-maven-2" m2compatible="true" checkmodified="true" changingPattern=".*SNAPSHOT">
                <artifact pattern="${local.maven2.dir}/[organisation]/[module]/[revision]/[module]-[revision].[ext]"/>
                <ivy pattern="${local.maven2.dir}/[organisation]/[module]/[revision]/[module]-[revision].pom"/>
            </filesystem>
            <ibiblio name="central" m2compatible="true"
                     root="http://repo1.maven.org/maven2/"/>
        </chain>
        <filesystem name="local-project" force="true" checkmodified="true" changingPattern=".*" cache="local-project">
            <artifact pattern="${ivy.settings.dir}/dummy.jar"/>
            <ivy pattern="${ivy.settings.dir}/[module]-ivy.xml"/>
        </filesystem>
    </resolvers>
    <modules>
        <module organisation="example.com" resolver="local-project"/>
    </modules>
</ivysettings>

不得不从 ant 中排除虚拟罐子,因为无法使用 ivy 找到更好的方法:

    <ivy:retrieve pattern="${dependency.export.dir}/[conf]/[artifact](-[revision]).[ext]" type="jar,bundle"/>
    <delete>
        <fileset dir="${dependency.export.dir}">
            <include name="**/*@local-project.jar"/>
        </fileset>
    </delete>

仍在努力寻找一种方便的方法来排除使用 ivy 提供的依赖项

如果有人对示例项目源感兴趣,可以在IVY-1443错误附件中找到。

于 2013-10-10T10:59:17.810 回答