【问题标题】:exclude local projects from ivy retrieve从常春藤检索中排除本地项目
【发布时间】:2013-07-10 02:15:06
【问题描述】:

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

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

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

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

更新

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

示例

给定项目结构:

  • 项目/
    • local.module1/
      • bin/
      • lib/
      • build.xml
      • ivy.xml
        • <dependency org="local" name="local.module2" />
    • local.module2/
      • bin/
      • 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 引用的构建类路径。在模块1的情况下:

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

如果有人想知道为什么 - 我正在尝试以最小的更改将 ivy 融入现有的构建系统。

【问题讨论】:

  • David W. answer 将解决提出的问题....但我想知道您的问题是否更深一些...以防万一,我建议了解 ivy 的控制配置机制依赖组。如果本地生成的构建工件是“本地”配置的一部分,那么将它们分开是微不足道的(常春藤检索任务支持配置)。总之,配置起初令人困惑,但功能强大。
  • 我尝试将本地项目移动到不同的配置,但它完全排除了它们的传递依赖关系。
  • 如果没有具体的例子很难评论......
  • 我添加了一个例子。
  • 多模块构建并不有趣(在 ANT 或 Maven 中)......在深入研究之前,每个模块是否将其 jar 发布到存储库中?请参阅以下内容以获得解释(和 doco 链接):stackoverflow.com/questions/4106143/…

标签: java ant ivy


【解决方案1】:

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

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

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

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

【讨论】:

  • 本地项目直接依赖于其他本地项目,&lt;dependency org="local" name="foo"&gt;&lt;exclude org="local"&gt; 不起作用。
  • 我明白了。你想要foo,但不是它的依赖项?使用 conf="provided-&gt;master" 作为您的配置。映射到master 不会拉取依赖项。
  • 我不想要 foo 但想要它的依赖项。
  • 这将非常棘手。您无法解析 jar 并且不包含该 jar。但是,可能会有解决方法。当一个类路径被解析时,它会在它可以找到的第一个 jar 中获取第一个类。您可以修改您的类路径,将您的 local2 项目中新建的 local2.jar 放在您的类路径前面。现在,当类被解析时,它将从您新构建的local 中获取,而不是从您的存储库中获取。这行得通吗?
【解决方案2】:

我最近遇到了同样的问题,即部分 ivy 集成到遗留项目中,只是为了从 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>

不得不从 ant 中排除虚拟罐子,因为无法找到更好的常春藤方法:

    <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 错误附件中找到。

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2016-12-31
    • 2016-02-15
    • 2011-04-12
    • 2011-10-26
    • 2010-10-28
    • 2015-03-05
    • 2013-08-17
    • 2017-02-23
    相关资源
    最近更新 更多