2012-09-19 127 views
1

我有一个maven multimodule项目,我希望我可以使用配置文件来定制基于POM属性的两种情况的插件配置,但事实证明配置文件只能由外部属性激活,而不能由POM属性,所以现在我正在寻找另一种方式来有不同的项目配置,我想获得一些想法。这里是我的设置maven自定义插件配置

我有一个三级树:一个根父母POM X与许多许多子模块A,B,C,...和每个这些模块有2个子模块1和2(所以A1,A2 ,B1,B2等)

我需要做的是为类型1的所有模块自定义叶模块的配置,为类型2的所有模块自定义另一模块的配置。我试图避免让所有1共享一个共同父母和所有2的另一(不同)共同父母,因为1和2已经从他们各自的父母(例子A或B)共享一些数据。如果没有其他方法,我会将所有常见数据从A降到A1和A2(不理想,DRY原则),并使所有1都从共同的父亲继承,但我试图避免这种情况。就像我说的,我尝试的是在树的树叶中设置属性,指定属性是1还是2,然后将两个不同的配置文件放在祖父POM X中,并根据属性激活配置文件。这没有奏效。

其他建议?

+1

请考虑使用说明您的模块布局并指定您正在使用的插件的图来修改此问题 - 必要时使用pom.xml片段。 – noahlz

回答

-1

我相信你可以用<pluginManagement>

例如实现你的目标,你的父POM,你有这样的事情:

<pluginManagement> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
     <systemPropertyVariables> 
       <vendor.license.file>../licenses/vendor.lic</vendor.license.file> 
     </systemPropertyVariables> 
     </configuration> 
    </plugin> 
</pluginManagement> 

其中在对POM的子模块定义神火2.5版。请注意,您实际上可以在插件配置中放入更多的版本,例如子项目继承(并覆盖)的配置。请参阅Maven POM Reference - Plugin Management

+0

你的解决方案不允许有两种不同的配置,这是我需要的: if(是类型1){使用配置1} else if(是类型2){使用配置2} – Hilikus

+0

“type 1“和”类型2“有不同的父母POM?另外,您是否可以根据属性以外的其他内容激活您的配置文件,例如存在文件?你是否可以在每个子模块中创建一个配置文件并使其“默认情况下处于活动状态?” – noahlz

+0

现在他们有一个共同的父母,就像我在我的OP中说过的那样,有A1,A2,所以他们共享父母A,B1,B2共享父母B.我提到的选项是让A1和B1共享父母common1,而A2 B2共享父母common2。但是我**在A和B中有共同的信息,需要在A1和A2中下推并复制 – Hilikus