在多项目构建中,似乎有几种方法来构建父poms,我想知道是否有人对每种方法的优点/缺点有任何想法。

拥有一个父pom的最简单的方法是将它放在项目的根目录中。

myproject/
  myproject-core/
  myproject-api/
  myproject-app/
  pom.xml

pom.xml既是父项目,也描述了-core -api和-app模块

下一个方法是将父目录分离到它自己的子目录中,如

myproject/
  mypoject-parent/
    pom.xml
  myproject-core/
  myproject-api/
  myproject-app/

父pom仍然包含模块,但它们是相对的,例如../myproject-core

最后,还有一个选项,其中模块定义和父模块是分开的

myproject/
  mypoject-parent/
    pom.xml
  myproject-core/
  myproject-api/
  myproject-app/
  pom.xml

父pom包含任何“共享”配置(依赖管理,属性等),myproject/pom.xml包含模块列表。

其目的是可扩展到一个大规模的构建,因此应该可扩展到大量的项目和工件。

一些额外的问题:

哪里是定义各种共享配置的最佳位置,比如在源代码控制、部署目录、公共插件等(我假设是父目录,但我经常被这个问题所咬,它们最终在每个项目中而不是一个公共项目中)。 maven-release插件,hudson和nexus如何处理你如何设置你的多项目(这可能是一个大问题,如果有人被多项目构建是如何设置的搞清楚了,问题就更大了)?

编辑:每个子项目都有自己的pom.xml,为了简洁起见,我省略了它。

替代标题

Xcode构建变量列表 打印Xcode构建设置列表 Clang环境变量 Xcode环境变量的规范列表

是否有一个Xcode环境变量的规范列表,可以用于构建规则等?

另一个针对Java的构建工具能给我带来什么?

如果你使用Gradle而不是其他工具,为什么?

我有一个多模块Maven项目,它有一个父项目P和三个子模块a、B和C。B和C都是战争项目,都依赖于a。

我可以在P中键入mvn compile,并正确编译所有子模块。当我想对特定模块进行操作时,问题就来了。

我希望能够为项目B打包一场战争,但是当我从B的目录运行package命令时,它抱怨无法找到a的依赖项。

我从这个问题中了解到:Maven和依赖模块可能Maven并不是为这种类型的依赖解决而设计的,但这引出了如何打包B的问题?

当我真的只想要B时,我必须为整个项目层次结构运行mvn包吗? 每当我想要打包B时,我必须将A的快照安装到本地存储库中吗?

当A仍处于积极开发阶段时,第二种情况就不那么有趣了。

这里有什么最佳实践吗?

如何将构建后事件限制为仅为一种类型的构建运行?

我正在使用事件将DLL文件复制到本地IIS虚拟目录,但我不希望在发布模式下的构建服务器上发生这种情况。

我想获得Git存储库的提交数量,有点像SVN的修订号。

我们的目标是将其用作唯一的、递增的构建号。

我目前这样做,在Unix/Cygwin/msysGit上:

git log --pretty=format:'' | wc -l

但我觉得它有点过时了。

有更好的办法吗?如果我实际上不需要wc甚至Git,那么它就可以在裸Windows上工作,那就太棒了。只要读取一个文件或目录结构…