1

我的应用程序中的 Ant 构建文件具有以下层次结构:

Application
|---MainProject
|       |__ build.xml
|
|---Project1
|       |__ build.xml
|
|---Project2
       |__ build.xml

Ant 目标根据其任务分布如下:

1) MainProject 构建文件ant调用clean所有其他构建文件的目标

2) 所有项目中的 JUnit 测试都在 MainProject 构建文件中执行,使用一个通用的 junit 目标,其中包含 junit 任务。

3) 其他构建文件中的所有其他任务都是通过ant调用build-project所有其他文件中的目标来执行的。

4) build-project 目标进一步决定了分别在各个文件中执行的任务。

你觉得这个架构怎么样?对于这种情况,您的方法是什么?推荐的方法是什么?

4

1 回答 1

1

这将是 ANT 中相当典型的多模块构建场景,随着时间的推移,它会导致相当典型的大型单体项目构建......

我的建议是考虑 Maven 如何构建它的多模块项目。您想模拟 Maven 的“本地存储库”概念,每个模块在其中推送其构建的工件。永远不要共享类路径,而是每个“build.xml”文件根据本地 repo 中的文件创建它们:

<path id="compile.path">
    <fileset dir="${local.repo.containing.built.jars}" includes="*.jar"/>
    <fileset dir="${dir.containing.third.party.jars}" includes="*.jar"/>
</path>

好处

  • 每个子模块都可以以独立的方式(在开发期间)构建,而无需强制重新构建整个项目。
  • 您的第 3 方依赖项在您的类路径中明显不同

随着项目的发展,您需要意识到模块之间的相互依赖关系。对于少量子模块,构建顺序是显而易见的,但随着时间的推移,一个子模块可能会依赖于许多其他首先构建的子模块。

最后,apache ivy项目提供了将类似 Maven 的功能添加到您的 ANT 构建中的工具。有一个多模块示例,但是,我发现作为初学者很难理解。我会把它放到你的 backlog 上,并考虑在未来将子模块工件发布到像 Nexus 这样的 Maven 存储库中。这将使您的 ANT 构建与使用 Maven 和 Gradle 等替代构建技术的其他团队兼容。

更新

于 2013-01-10T22:23:14.393 回答