有没有办法从maven中的不同多模块项目构建项目和依赖它的项目?

时间:2015-04-16 14:35:21

标签: maven build

说我有项目A,B,C和D. B取决于A,C取决于B,D取决于C,所以

A <-- B <-- C
      ^
      └ --- D

有没有办法用maven来构建C和D给定B但是不构建A?在中有没有办法构建项目和依赖它的项目?

A,B,C和D属于多模块项目。我知道我可以建立整个项目,但这似乎是浪费。

编辑:针对此案例找到的解决方案,在多模块项目的根目录中执行mvn <your goals here> -pl B -amd,并且仅供进一步参考,例如B也是一个多模块项目并且有一个,b,和c中的c,你想做c,做mvn <your goals here> -pl B\c -amd

另外,如果A和B在一个多模块项目中而C和D在另一个模块中,那么有没有办法做到这一点?我意识到这可能比较棘手。

 platform | us-specific
          |
A <-- B <-+-- C
      ^   |
      └ --+-- D

1 个答案:

答案 0 :(得分:0)

在包含platformus-specific的文件夹中添加pom文件,如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>some.group</groupId>
  <artifactId>handyPom</artifactId>
  <version>0.1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <modules>
    <module>platform</module>
    <module>us-specific</module>
  </modules>
  <name>Captain Man's Handy Dandy Pom</name>
</project>

包装需要pom,您需要为每个要包含的内容提供一个模块。如果你愿意,名字可以改变。

如上所述,你做mvn <your goals here> -pl B -amd

  • -pl(或--projects)指定项目列表,而不是构建每个项目。
    • 您可以cB中指定-pl B\c之类的子项目。
    • 这是一个列表,因此更多的逗号分隔符-pl B\c,C\a,同时执行B\cC\a
    • 如果由于某种原因您有一个带有前导短划线的目录(例如-foo),您仍然可以像-pl \-foo一样使用它。
  • -amd(或--also-make-dependents)还会根据整个反应堆列表中的任何内容构建所有内容(例如,当您不使用-pl <projects>时),即他们的家属
    • 此外,-am(或--also-make)也将构建列表依赖于完整反应堆的所有内容。即他们的依赖。
    • 关于依赖关系和依赖关系的提醒,问题是箭头是否意味着依赖于它所指向的东西
      • AB
      • 的依赖关系
      • CDB
      • 的家属