从常春藤检索中排除本地项目

时间:2013-07-11 17:20:36

标签: java ant ivy

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

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

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

或者也许以某种方式可以使用Filesystem解析器,它会解析为${projects.dir}/*/ivy.xml,就像IvyDE对工作区解析器一样。

更新

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

示例

鉴于项目结构:

  • 项目/
    • local.module1 /
      • 仓/
      • LIB /
      • 的build.xml
      • 的ivy.xml
        • <dependency org="local" name="local.module2" />
    • local.module2 /
      • 仓/
      • LIB /
      • 的build.xml
      • 的ivy.xml
        • <dependency org="external" name="library1" />
    • common.xml
    • 的build.xml

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

由此我想构建构建类路径,它包含对本地项目的直接引用和对外部库的jar引用。如果是module1:

  • ../ local.module2 / bin中
  • LIB / external.library1-1.0.jar

如果有人想知道为什么 - 我正在努力将常春藤融入现有的构建系统中,而且变化很小。

2 个答案:

答案 0 :(得分:0)

ivy.xml文件中,添加exclude个实体。

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

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

(除非你在谈论这个特定项目的罐子,如果是这样的话,它们根本不应该在你的ivy.xml文件中。

答案 1 :(得分:0)

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

<强> ivysettings.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>

由于未能找到更好的常春藤方法,不得不从蚂蚁中排除虚拟罐子:

    <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>

仍在努力寻找方便exclude provided dependencies with ivy的途径。

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