使用动态依赖项构建多个Java项目

时间:2012-12-17 16:44:47

标签: java ant build compilation project

我在一个文件夹中有多个java项目。还有一个带库的第二个文件夹,可以用作项目的构建依赖项。项目也可能与其他项目有依赖关系。构建所有项目的最佳方法是什么?

换句话说,我想在没有明确告知其依赖关系的情况下构建项目。我认为最大的问题是项目之间的依赖性。

3 个答案:

答案 0 :(得分:2)

您可以使用多个可用的构建系统。 Maven内置了完整的依赖系统。几乎所有第三方开源jar都可以通过World Wide Maven存储库系统直接访问。基本上,您描述了您需要的jar(groupId,artifactId和version),Maven会自动为您提取它。不仅如此,Maven还将构建您的项目,而无需创建构建文件。相反,您必须在项目对象模型(一个pom.xml文件)中描述您的项目,Maven将下载您需要的所有内容,包括所有编译器等。

几乎所有新项目都使用Maven,但Maven有一些缺点:

  • 由于您无法控制构建过程,因此有时可能会像刺激黑盒子一样让构建按照您想要的方式工作。
  • 文档可能很少 - 特别是如果你超越了基本的Java编译。
  • 您通常必须以特定布局排列项目。例如,源文件应位于src/main/java下,而JUnit测试位于src/test/java下。您不必遵循建议的布局,但是您必须以这种方式修改pom.xml文件,以使您的构建工作。这首先打败了pom.xml的整个目的。
  • 如果您已经有另一个构建系统设置(如Ant),则会丢失所有内容。没有简单的方法可以从Ant迁移到Maven。

另一个名为Ant Ivy。 Ivy使用Ant进行构建,但可以访问Maven的全球存储库系统以获取第三方依赖项。如果你已经在Ant上投入了大量资金,这是一个很好的妥协。我还发现使用常春藤的Ant比Maven更好(尽管这并不太难)。在曼宁出版物Ant in Action中有一篇很好的章节介绍常春藤的基础知识。

无论使用哪一个流程,我都建议您使用NexusArtifactory构建公司范围的Maven存储库。这样,任何专有的第三方jar(如Oracle jar)也可以存储在公司范围内的Maven存储库中,因为它们不在标准的World Wide Maven存储库中。

顺便说一句,如果这是公司范围内的努力,并且您正在将多个Ant项目移动到Ivy中,那么我在Github中使用的Ivy项目会让事情变得更容易。

哦,还有第三种可能性叫Gradle,我对此一无所知。我也相信它可以使用World Wide Maven存储库。它基于Groovy,它基于Java语法,这就是我所能说的。也许其他人可以填写您的详细信息。 Gradle小组认为它解决了Ant / Ivy和Maven的很多问题。

答案 1 :(得分:0)

无论您使用什么工具,如果您有各种相互依赖的项目,您需要清楚在构建依赖项目之前首先构建的独立项目。您需要为项目建立清晰的依赖关系结构。

答案 2 :(得分:0)

您可以使用Apache Ivy执行此操作。您可以为每个项目中的ivy.xml文档布置公共库的位置,定义已发布的工件和相互依赖关系,并让使用常春藤任务的顶级Ant构建根据构建顺序确定构建顺序那些依赖。