ant build.xml文件的最佳位置是什么?

9
对于那些使用Ant多个项目的人来说,你们把build.xml文件放在哪里?你们是在每个项目中都放一个,还是把它们放在包含所有Ant相关文件的单独项目中?
通常建议是在每个项目中都放置一个build.xml。但这有一些缺点:
- 它使得在多个项目中重用共同的目标变得困难。 - 有时您想使用Ant从源代码控制中导出并部署项目。如果构建文件在项目本身中,则显然无法做到这一点。
但是,如果将它们全部放在一个公共位置:
- 用户需要知道它们的位置才能使用它们;他们不能只使用“ant-find”来查找当前项目的文件。 - 您不能为项目的不同分支设置不同的构建说明。
你们都是怎么做的呢?
编辑:感谢迄今为止提供的好建议。至于Maven,这些不是Java项目,我认为Maven只适用于Java。

1
虽然Maven主要是Java构建工具,但它也有其他语言的插件。请参阅https://dev59.com/ZXM_5IYBdhLWcg3w6X1e#1171764。 - Rich Seller
Maven 可以构建许多语言,不仅仅是 Java。 - AlBlue
5个回答

5
将Ant文件与项目放在一起。这是Ant的事实标准,并由Ant的创建者推荐。我将尝试解决您提出的一些问题:
  • 重复使用常见目标应使用Eric Hatcher在他的书《Java Development with Ant》中描述的技术。基本上,您将所有共同点提取到一些顶层文件中,所有其他Ant文件都从中“继承”。

  • 使用Ant从源代码控制中导出项目对我来说似乎很奇怪,但如果您想这样做,可以使用不同的Ant文件 :-) 您可以制作一个像ant export -Dproject=foo/bar这样的目标。

对于Ant,我建议您阅读那本书-它有大量有用的技巧。

然而,我真正的建议是放弃Ant并转换为Maven-就像Apache Software Foundation所做的一样(他们维护Ant和Maven)。


2
如果您正在处理独立项目,可以:
  • 将您的build.xml放置在顶层
  • 将常见的Ant定义(Antlib)放置到另一个项目中(例如config)
  • 使用svn:externals将共同的Antlib定义(从'config')导入您的项目

编辑 使用svn:externals的技巧是,如果您链接到某些常见文件的HEAD,可能会发生它们在几个月/年后更改。因此,每次打标记时,您都应该更改svn:externals以指向所包含项目的固定版本。当需要在最后一次构建多年后重新构建项目时,这可能会很方便。


这是我们使用的确切配置。我不想在像代码覆盖目标这样的地方到处复制和粘贴继承。虽然它并不是什么大问题,但我应该钉住一个特定的版本。 - Kevin Peterson
build.xml文件在哪里? - Ahmad Arslan

1

我的经验法则是将build.xml文件放在所有文件都被引用的目录下。换句话说,没有相对路径应该以“../”开头。在我所在的地方,通常意味着将其放在“trunk”目录中,该目录下面有src、lib、build、docs等目录。

这样做可以使文件中的路径更加清晰,并且可以明确如何构建项目。

当我有多个需要构建的项目时,我会为每个项目创建一个单独的build.xml文件,并在所有项目所在的目录中创建一个中央build.xml文件,调用那些其他的build.xml文件。这样做可以在很少的工作量下给您带来很大的灵活性。


1

我期望一个Ant的构建文件应该位于项目的顶部(已经很痛苦了,必须查看构建文件才能“发现”如何构建项目,如果我还要先找到它,那就会让我完全疯掉)。现在,关于你提到的所有缺点,我很想说:为什么不使用Maven呢?


0

我过去做这件事的方式是(现在我只使用Maven):

  • 在每个项目的根目录下有一个build.xml
  • 创建一个总体的build.xml,包括所有项目,并将其放置在我的代码库的主干中
  • 总体的build.xml为每个项目定义了检出任务。我猜当你提到从代码库导出时,你实际上是指导入。
  • 总体的build文件还定义了依赖关系(如果有的话)
  • 您可以使用每个项目的单独构建文件更新各个项目
  • 如果您确实定义了常见任务,则可以像其他人建议的那样从公共构建文件继承。

看起来你的项目集可能是迁移到Maven的好选择,我知道这并不总是可能的,但如果你有时间,你可能想要研究一下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接