1

我正在尝试将我公司的一个大项目的所有子项目编译成许多具有托管依赖项的 jar,这样并不是每个在一个项目中工作的人都只需要从共享存储库下载最新的 jar。

ivy 似乎是我们的问题的解决方案,因为 ivy 说它与 ant (out build system) 集成得很好。但是我无法通过教程,它们都在某种程度上比帮助更令人困惑。

一开始我想要实现的只是有两个小项目。第一个有一个类和一个方法,第二个只是调用这个方法。第一个项目应该编译成一个 jar,然后由第二个项目从共享存储库下载。

谢谢你的帮助。

4

1 回答 1

3

文档中描述了一个多模块项目:

http://ant.apache.org/ivy/history/latest-milestone/tutorial/multiproject.html

并且源代码在 subversion 中可用:

http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/example/multi-project/

其工作原理的简化摘要:

包装器构建

以正确的顺序调用每个单独的模块构建。如果模块 A 依赖于模块 B,则首先构建 B:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="build-all" default="build">

    <!--
    ==========================================================================
    Use the ivy buildlist task to create an ordered list of sub-project builds
    ==========================================================================
    -->
    <target name="build-list">
        <ivy:buildlist reference="build-path">
            <fileset dir="." includes="modules/**/build.xml"/>
        </ivy:buildlist>
    </target>

    <!--
    ==============================
    Invoke targets in sub-projects
    ==============================
    -->
    <target name="build" depends="build-list" description="Invoke build target on sub-projects">
        <subant target="build" buildpathref="build-path" />
    </target>

</project>

有关更多信息,请参阅构建列表文档。

模块构建

每个模块将在构建开始时下载它的依赖项

<target name="init">
    <ivy:settings file="../../ivysettings.xml"/>
    <ivy:resolve/>
</target>

最后,将发布它的构建工件:

<target name="publish" depends="build" description="Publish module artifacts to the respository">
    <ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true">
        <artifacts pattern="${build.dir}/[artifact].[ext]"/>
    </ivy:publish>
</target>

不要忘记,要使所有这些工作,每个模块都必须声明它所依赖的内容和发布的内容

<ivy-module version='2.0'>

    <info organisation='com.myorg' module='mymod'/>

    <publications>
        <artifact name="mymod" type="jar"/>
    </publications>

    <dependencies>
         ..
    </dependencies>

</ivy-module>
于 2010-11-05T21:22:23.203 回答