我有三个项目:A,B,C
并在ant中编译该文件。
C依赖B依赖A
到目前为止,我所有的依赖项都在eclipse中,并且我在ant中有一个build.xml与:
<eclipse.incrementalBuild project="A" kind="incremental"/>
<eclipse.incrementalBuild project="B" kind="incremental"/>
<eclipse.incrementalBuild project="C" kind="incremental"/>
现在,我有ivy.xml文件-例如:
<ivy>
<ivy module="B"/>
<dependencies>
<dependency name="A">
</dependencies>
</ivy>
现在,当我按此顺序将A,B,C发布到存储库(我使用sonatype nexus存储库)时,所有工作都很好,因为该存储库也用于解析,因此该过程是:
1.解决对A的依赖性-否这样
2.当前将工作空间A中的jar作为jar上传到存储库
3.解决B的依赖关系-将A解析为依赖关系
4.当前将工作空间B中的jar作为jar上传到存储库
5.解析C-B和A的依赖关系被解析为依赖关系
6.当前将工作空间C中的jar作为jar上传到存储库
我看到它发布到nexus的方式是用于交付产品
我需要一个简单的build.xml来仅编译我的项目-因此,我不想一直发布新版本。
相反,我正在寻找使用常春藤的方式
1.编译A
2.然后使用已经编译的A编译B
2.然后使用已编译的B,A编译C
我考虑过在文件系统中使用本地存储库,在该系统中进行了1-6阶段-生成要使用的本地jars-但是,这有点麻烦,因为:
1.我的解决方案将必须包含两个解决程序-连结回购之前的文件系统-这意味着在实际发布时,我将必须记住删除本地jar
2.对于某些我认为可能有更简单的解决方案的事情,听起来有些麻烦。
本质上,我想模仿eclipse的IVY插件,该插件可以解决工作空间中的依赖关系并使用工作空间中的其他项目来编译项目-但我正在寻找最佳,最推荐的方法。
谢谢
最佳答案
您说:
我在ant中有三个项目:A,B,C和build.xml。
编译它们。
这表明您的项目实际上是一个大型的整体构建。
相反,您需要模拟Maven的工作方式。每个模块都需要有自己的构建文件和一个列出该模块依赖性的常春藤文件。每个模块将其自己的jar工件发布到存储库(本地或远程)中,从而使其他模块可以使用ivy resolve操作进行访问。
以下示例提供了有关使用常春藤的多模块构建中常春藤文档的链接。
ivy simple shared repository
Ivy: Using dynamic revisions
分解一个大项目并不容易,我希望这会有所帮助。
关于java - IVY-多项目本地构建-模仿“解决工作区中的依赖关系”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27537645/