我正在尝试将我公司的一个大项目的所有子项目编译成许多具有托管依赖项的jar,因此并非每个在一个项目中工作的人都需要从共享存储库下载最新的jar。
常春藤似乎是我们问题的解决方案,因为常春藤说它与ant(out build system)很好地集成。但是我无法通过这些教程,它们在某种程度上更令人困惑而不是有用。我想在一开始就想要实现的是拥有两个小项目。第一个有一个类有一个方法,第二个只是调用这个方法。第一个项目应编译成一个jar,然后由第二个项目从共享存储库下载。
感谢您的帮助。
答案 0 :(得分: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>
有关详细信息,请参阅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>