查找遗留ART项目的模块之间的依赖关系以迁移到IVY

时间:2013-04-16 06:40:01

标签: ant ivy dependency-management

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

我做出的明显决定是使用IVY将其迁移到模块化构建,以便在EAR的子模块之间进行依赖关系管理,因此我只构建已更改的模块,然后每次打包新的EAR。我很难找到找出这些子模块之间依赖关系的好方法。请注意,第三方依赖项很容易破解。我只需将这些子模块的lib文件夹中的所有内容移动到IVY。但是,前者是我被困的地方。 这就是他们所做的:

  1. 将所有模块的源代码复制到目录
  2. 将“所有内容”编译成global.jar
  3. 将此global.jar添加到类路径
  4. 此后构建每个单独的模块
  5. 现在我怎么弄清楚,例如模块C依赖于模块A和B,所以A和B应该像前者一样依赖常春藤?一种方法是在eclipse中一次添加一个模块并尝试构建,然后由于缺少类而导致失败;但是必须有一个比这更好的方法,我无法想象在接下来的一个月里度过这个问题:)

1 个答案:

答案 0 :(得分:0)

首先,您需要创建常春藤存储库。我不知道怎么做。尝试在常春藤网站上找到它。之后,您需要创建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(此项目取决于module2module3; module1也发布在存储库中)

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