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



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

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

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

现在我如何计算,例如,模块C依赖于模块A和B,所以A和B应该作为ivy依赖于前者?一种方法是在eclipse中一次添加一个模块并尝试构建,然后消除由于缺少类而导致的失败;但肯定有比这更好的办法,我无法想象要花一个月的时间来解决这个问题:)

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

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

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

示例ivy.xml用于module1项目(该项目依赖于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>

相关内容

  • 没有找到相关文章

最新更新