0

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

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

4

3 回答 3

2

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

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

  • 由于您无法控制构建过程,因此有时感觉就像戳黑盒子以使构建以您想要的方式工作。
  • 文档可能很少——尤其是当您超越基本的 Java 编译时。
  • 您通常必须以特定的布局安排您的项目。例如,src/main/java当 JUnit 测试在src/test/java. 您不必遵循推荐的布局,但是您必须以pom.xml这种方式和那种方式修改文件才能使您的构建工作。这首先破坏了 pom.xml 的全部目的。
  • 如果您已经有另一个构建系统设置(如 Ant),那么您将失去一切。从 Ant 迁移到 Maven 没有简单的方法。

另一个叫做 Ant with Ivy。Ivy 使用 Ant 进行构建,但可以访问 Maven 的全球存储库系统以获取第三方依赖项。如果您已经对 Ant 进行了大量投资,那么这是一个很好的折衷方案。我还发现 Ant with Ivy 的文档比 Maven 更好(尽管这并不太难)。Manning Publication 的Ant in Action中有一章很好的介绍了 Ivy 的基础知识。

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

顺便说一句,如果这是公司范围内的工作,并且您要将多个 Ant 项目转移到 Ivy,我在Github中使用了一个 Ivy 项目,它使事情变得更容易。

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

于 2012-12-17T21:25:52.870 回答
0

您可以使用Apache Ivy做到这一点。您可以为您的公共库布置位置,在每个项目的 ivy.xml 文档中定义已发布的工件和相互依赖关系,并让具有 Ivy 任务的顶级 Ant 构建确定构建顺序应该基于什么那些依赖。

于 2012-12-17T21:03:16.003 回答
0

无论您使用什么工具,如果您有各种相互依赖的项目,您需要在构建依赖项目之前明确哪些独立的项目将首先构建。你需要为你的项目有一个清晰的依赖结构。

于 2012-12-17T16:49:28.883 回答