2016-01-28 188 views
1

以下设置:Maven的:装配儿童项目(模块)在多模块项目

rootpom 
|- parentpom 
| |- projectApom 
| |- projectBpom 
| |- other projects poms 
|- other projects poms 

层次结构中的每个项目都是通过使用<模块>标记在它的父POM以及父约束被指定父母>标记<。

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <archive> 
     <manifest> 
     <mainClass>ClassToExecute</mainClass> 
     </manifest> 
    </archive> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
</plugin> 

现在我去rootpom的目​​录,然后执行:

mvn --projects parent/projectB compile assembly:single 

的问题是,现在项目B取决于

项目A和项目B使用的片段都指定Assembly插件A(和其他一些)所以使用这个命令assembly:single将适用于所有项目。

所以问题是如何编译多个项目(依赖关系),只汇编一个(最后一个)?

回答

0

简单:不要在命令行上使用assembly:single,但会将maven-assembly-plugin的执行绑定到所需项目的特定阶段。

如果你只想要组装唯一项目B,则在B的POM,你会:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <archive> 
      <manifest> 
      <mainClass>ClassToExecute</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

这样,运行mvn --projects parent/projectB clean package将只包B.

+0

但将它也编译依赖关系好?它们的当前版本中未安装依赖项。 –

+0

@MartinKersten如果它们是同一个多模块项目的模块,那么它会起作用。 – Tunaki

+0

我试过了,失败了。它告诉我没有发现依赖关系。所以它不会重新创建依赖模块。我不确定这是因为我使用了:“--project parentpom/projectApom”,这是项目的rootpom/parentpom/projectApom,依赖项缺失是rootpom/otherPom。但是从mvn计划中可以看出,它只是想构建projectApom的其他依赖关系。 –