多项目Maven项目的延迟依赖项

时间:2010-10-13 22:27:25

标签: build maven

我们正在考虑将Maven用于大型多项目构建,以便让您了解大小,一些子项目有几百万行代码。

理想的结构如下:

  • 了projectA
    • module1
    • module2
  • 项目B
    • moduleAlpha(取决于moduleBeta)
    • moduleBeta(取决于projectA:module1)
  • ...

其中每个模块实际上是一个maven子项目,并且依赖关系并不总是在工件级别(即jar),而是导致子项目在必要时进行编译。

添加公共项目根允许表达所描述的依赖关系,例如:

  • 项目根
    • 了projectA
      • module1
      • module2
    • 项目B
      • moduleAlpha(取决于moduleBeta)
      • moduleBeta(取决于projectA:module1)
    • ...

但强迫你从项目根构建。请记住,这是一个非常大的项目,完整的构建将是不可取的。

大多数团队甚至在 moduleX 级别的 projectX 级别工作。

我们需要的是有时针对生成的工件(即 module1 生成的jar)构建,有时我们要从源代码构建。

我已经看了一下reactor插件,它允许你从某个点恢复构建或只构建dependents。但它似乎非常手动(尽管在某些情况下它非常有用)。

我想到的是某种类型的工件存储库,它在需要时构建工件。例如,使 projectA 成为 projectB 引用的工件库。 当您出于某种原因需要重建 projectA 的工件时,您可以删除jar。

这样的东西是作为Maven的一部分还是作为插件实现的? 如果没有,是否可行实施?

1 个答案:

答案 0 :(得分:3)

  

我们需要的是有时针对生成的工件(即module1生成的jar)构建,有时我们要从源代码构建。

我没有看到任何特殊问题:

  • 当您想要构建二进制依赖项(jar)时,只需构建您正在处理的工件(并让Maven解析并使用二进制依赖项)。
  • 当您想要构建源代码时,请使用reactor构建和高级reactor选项,例如构建moduleAlpha和moduleAlpha的依赖项:

    mvn -pl moduleAlpha -am
    
  

我想到的是某种类型的工件存储库,它在需要时构建工件。例如,使projectA成为projectB引用的工件库。当您出于某种原因需要重建projectA的工件时,您可以删除jar。

我不确定你在说什么,删除JAR 听起来不是一个好主意。

您需要的是一个持续构建过程,该过程尽可能经常构建整个项目,以生成所有模块的SNAPSHOT并将它们部署在公司存储库中。这只是要走的路。

为了尽可能快地构建,我考虑使用Maven 3.x和parallel builds选项。