【问题标题】:Finding dependecies between modules of a legacy ANT project for migration to IVY查找遗留 ART 项目的模块之间的依赖关系以迁移到 IVY
【发布时间】:2013-04-08 11:08:10
【问题描述】:

我正在处理一个使用 ANT 将源代码构建到 EAR 中的项目。几年来,该项目已经发展到庞大的规模,超过五十个模块,毫不奇怪,构建源代码需要 2 个小时。

我做出的明显决定是将其迁移到模块化构建,使用 IVY 来管理 EAR 的子模块之间的依赖关系,因此我只构建已更改的模块,然后每次都打包一个新的 EAR。我一直在努力寻找一种找出这些子模块之间依赖关系的好方法。请注意,第 3 方依赖项很容易破解。我只是将这些子模块的 lib 文件夹中的所有内容移动到 IVY。但是,前者是我卡住的地方。 他们就是这样做的:

  1. 将所有模块的源代码复制到一个目录
  2. 将“一切”编译成 global.jar
  3. 将此 global.jar 添加到类路径中
  4. 此后构建每个单独的模块

现在我如何确定例如模块 C 依赖于模块 A 和 B,因此 A 和 B 应该作为前者的常春藤依赖项?一种方法是在eclipse中一次添加一个模块并尝试构建,然后消除由于缺少类而导致的失败;但是必须有比这更好的方法,我无法想象在接下来的一个月里会花上一个月的时间来解决这个问题:)

【问题讨论】:

  • 您想使用 ivy 设置模块之间的依赖关系吗?你可以在这里阅读更多内容ant.apache.org/ivy/history/latest-milestone/ivyfile/…
  • 是的,这是最终目标;这里的问题是找到这些依赖项,以便我可以在 IVY 文件中定义它们;并给出上面当前的构建方法;我没有想到直接的方法。

标签: ant ivy dependency-management


【解决方案1】:

首先您需要创建常春藤存储库。我不知道该怎么做。尝试在常春藤网站上找到它。之后您需要创建build.xmlivy.xml 文件。

构建依赖于module1的一些产品的示例build.xml

<project name="ivy.test" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="resolve">
        <!-- this line tells ivy to use ${ivy.settings.file} where are ivy repositories; more info http://ant.apache.org/ivy/history/latest-milestone/settings.html -->
        <ivy:configure file="${ivy.settings.file}"/>
        <!-- resolve ivy dependencies from ivy.xml and put them in ivy cache dir -->
        <ivy:resolve file="${build.dir}/ivy.xml" transitive="false" />
        <!-- finally copy resolved dependencies to ${ivy.lib.dir} -->
        <ivy:retrieve conf="default" pattern="${ivy.lib.dir}/[artifact].[ext]" />
    </target>

</project>

用于解决依赖关系的示例 ivy.xml(将尝试在 ivysettings 文件中定义的 ivy 存储库之一中查找 module1

<ivy-module version="2.0">
    <info organisation="your.organisation" module="modulename">
        <ivyauthor name="yourname" />
    </info>
    <configurations>
        <conf name="default" description="default conf" />
    </configurations>
    <dependencies>
        <dependency name="module1" org="your.organisation" rev="latest.release" conf="default->default" />
    </dependencies>
</ivy-module>

module1 项目使用的示例 ivy.xml(此项目依赖于 module2module3module1 也发布在存储库中)

<ivy-module version="2.0">
    <info organisation="your.organisation" module="module1"> <!-- module name is used in dependency -->
        <ivyauthor name="yourname"/>
    </info>
    <configurations>
        <conf name="default" description="default configuration"/>
    </configurations>
    <publications>
        <artifact name="module" ext="dll" type="dll" conf="default"/>
    </publications>
    <dependencies>
        <dependency name="module2" org="your.organisation" rev="latest.release" conf="default->default" />
        <dependency name="module3" org="your.organisation" rev="latest.release" conf="default->default" />
    </dependencies>
</ivy-module>

【讨论】:

  • 我可能无法正确表达问题,但我的问题不在于 Ivy 语法。我的问题是找出进入常春藤文件的依赖结构。如果我接受你的回复;我必须找出module2和3是module1的依赖项。
  • 你想在哪里使用这个dependency structure信息?在 build.xml 中还是在它之外?
  • 当然,在 build.xml 中,我的问题是因为所有内容都被复制到单个源目录并且单个 global.jar 是由它制成的,所以我在弄清楚这个依赖结构之前就被困住了在任何地方使用它。
  • 对不起,我不知道你想做什么。如果你想下载依赖传递,你可以使用transitive 参数(ant.apache.org/ivy/history/latest-milestone/ivyfile/…)。如果您想从 ivy.xml 获取一些信息,您可以使用 ivy ant 任务 (ant.apache.org/ivy/history/2.2.0/ant.html)。例如listmodules 将列出符合某些条件的 repo 模块。
  • 没关系:)。编写了一个脚本,通过每个模块的 eclipse 设置来找出它所依赖的其他 eclipse 项目。我现在有我想要的信息。
猜你喜欢
  • 2013-10-11
  • 2013-01-19
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2015-11-10
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多