2011-09-29 82 views
5

我对多模块项目中的属性有疑问。多模块项目中的Maven属性重置为默认值

考虑以下3级项目struture:

project 
+- pom.xml (packaging: pom)  //referred to as super-pom 
+- module_group 
    +- pom.xml (packaging: pom)  //referred to as group-pom 
    +- module 
     +-pom.xml (packaging: jar) //referred to as module-pom 

在超级POM我定义属性修订其得到默认值“未知”。

此外我声明和使用buildnumber-maven-plugin它被配置为获得svn修订并将其放入修订版。我的配置maven-jar-plugin将该属性写入清单。

在module-pom中,我声明使用buildnumber-maven-plugin以便实际执行。


这一切都可以直接构建模块,即仅执行module-pom。 清单包含由控制台中打印的buildnumber-maven-plugin报告的修订。

但是,如果我执行超聚甲醛或组-POM的默认值修订被写入清单,虽然buildnumber-maven-plugin被执行,并获取正确的版本(这之前打印到控制台运行maven-jar-plugin)。

所以我有这种感觉,我在多模块项目中遗失了一些属性继承。

有没有人有一个想法这里有什么可能是错的?或者任何人都可以指出我对这些情况下的属性如何处理的描述(不幸的是,我还没有设法找到一个好的描述)?

更新

我做了一些研究和一些测试与调试输出(-X选项),并从我迄今发现跑,我想我的问题是这样的:

1)在解析pom中使用的属性被替换为它们的值。

考虑这种部分POM:

<!-- declare the property default value --> 
<properties> 
    <revision>default</revision> 
</properties> 

... 

<!-- use the property --> 
<someconfig>${revision}</someconfig> 

的POM被评估之后,它似乎导致在将对应于这样的状态:

<properties> 
    <revision>default</revision> 
</properties> 

... 

<!-- The property seems to be "statically" replaced --> 
<someconfig>default</someconfig> 

2),其设定所述实际插件财产价值运行后,即使在validate阶段。

因此属性本身被正确设置为新值,但不再被读取。

3)使用<someconfig>插件(在我的情况下,它会是maven-jar-plugin)现在<someconfig>default</someconfig>下运行,因此它不读取revision可言。

任何人都可以证实这一点吗?

回答

0

我只能说,在超级pom中声明buildnumber-maven-plugin和maven-jar-plugin非常适合我,无论它是组构建还是定位构建。

下面是这个超级POM的一部分(所有项目父):

 <!-- Generate build number --> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>buildnumber-maven-plugin</artifactId> 
      <version>1.0</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>create</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <doCheck>false</doCheck> 
       <doUpdate>false</doUpdate> 
      </configuration> 
     </plugin> 
     <!-- Attach build number to all jars --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
        </manifest> 
        <manifestEntries> 
         <Implementation-Build>${buildNumber}</Implementation-Build> 
         <Implementation-Build-Timestamp>${maven.build.timestamp}</Implementation-Build-Timestamp> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin>