2010-03-08 63 views
8

我有一个多模块的maven项目,它建立成功,我想建立只有一个我有。我会怎么做profiles?我可以通过两种方式从控制台执行此操作,一种方式是转到子模块,然后我可以使用reactor来构建一个模块。单个模块的Maven配置文件

我可以用配置文件做同样的事吗?通过修改POM?谢谢

编辑

如果无法从POM,我可以做到这一点从settings.xml的?

回答

13

要实现这与配置文件,您可以使用两个配置文件,一个<activeByDefault>与所有模块和另一个只与想要的模块。事情是这样的:

<profiles> 
    <profile> 
    <id>all</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <modules> 
     <module>module-1</module> 
     ... 
     <module>module-n</module> 
    </modules> 
    </profile> 
    <profile> 
    <id>module-2</id> 
    <modules> 
     <module>module-2</module> 
    </modules> 
    </profile> 
<profiles> 

然后调用它像这样:

mvn -Pmodule-2 package 

两件事需要注意:

  1. 您需要的<modules>从POM移动在“默认“配置文件(因为配置文件中的<modules>只是附加的,它们不会隐藏在POM中声明的模块)。
  2. 通过将其标记为<activeByDefault>,如果没有其他活动,则会选择“默认”配置文件,但如果有其他活动,则会取消激活。

甚至可以参数化的模块的名称,并把它作为财产:

<profiles> 
    ... 
    <profile> 
    <id>module-x</id> 
    <activation> 
     <property> 
     <name>module-name</name> 
     </property> 
    </activation> 
    <modules> 
     <module>${module-name}</module> 
    </modules> 
    </profile> 
<profiles> 

并调用行家这样的:

mvn -Dmodule-name=module-2 package 

但是,这是一个糟糕的实现恕我直言,我更喜欢-pl“高级”反应堆选项(少xml,更多的功率和灵活性):

mvn -pl module-2 package 
+0

@Pascal Thivent Just brilliant ..我不知道该说些什么..谢谢你m8,当涉及到maven时,你是首屈一指的 – ant 2010-03-08 13:40:54

+0

我同意@Pascal是一位天才maven。我还会添加使用反应堆构建比配置多个配置文件更清洁的语音。 – 2012-11-13 21:17:46