【问题标题】:ivy simple shared repositoryivy 简单的共享存储库
【发布时间】:2011-05-05 14:28:57
【问题描述】:

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: ivy dependency-management


    【解决方案1】:

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

    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>
    

    有关详细信息,请参阅buildlist 文档。

    模块构建

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

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

    【讨论】:

    • 我确实知道常春藤主页上的教程,但它们很奇怪。不知何故,我无法从中提取有用的信息。有很多 xml 文件,其中包含许多奇怪的条目,这些条目在任何地方都没有描述。我希望我能从一个更简单的小项目开始。
    • 我添加了一些额外的解释。多模块构建并不容易。你会发现它们在 Maven 中也不好玩:-)
    猜你喜欢
    • 2012-04-08
    • 2013-10-02
    • 2013-03-25
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多