2011-09-29 88 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>