2012-08-31 91 views
2

我發現在同一命令行調用中運行在POM中定義的mvn install和overriding屬性時,不會更新POM中已定義屬性的值安裝到本地存儲庫,導致打包的工件與POM文件不同步。例如,考慮兩個模塊,模塊酮和模塊2具有以下的POM在命令行上覆蓋Maven屬性(Maven 2.2.1)

模塊酮POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0.0</modelVersion> 
<groupId>org.myorg.test</groupId> 
<artifactId>module-one</artifactId> 
<version>1.0</version> 

和模塊2 POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0.0</modelVersion> 
<groupId>org.myorg.test</groupId> 
<artifactId>module-two</artifactId> 
<version>1.0</version> 
<properties> 
    <module.one.version>1.0</module.one.version> 
</properties> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
       <manifest> 
        <addClasspath>true</addClasspath> 
       </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>org.myorg.test</groupId> 
     <artifactId>module-one</artifactId> 
     <version>${module.one.version}</version> 
    </dependency> 
</dependencies> 

在module-one POM上運行mvn install將在您的本地安裝module-one:1.0程序存儲庫。現在,如果您編輯一個POM模塊並將版本設置爲2.0,並運行mvn install,則會將模塊一:2.0安裝到您的本地存儲庫。

現在在module-two pom上運行mvn install -Dmodule.one.version = 2.0將導致將module-two:1.0安裝到本地存儲庫。然而,檢查內置JAR和打開清單文件將呈現以下

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Build-Jdk: 1.6.0_26 
Class-Path: module-one-2.0.jar 

但是,隨着本地倉庫這種內置罐子去的POM仍會參考於模塊一個依賴:1.0因爲酒店保持原來的定義

<properties> 
<module.one.version>1.0</module.one.version> 
</properties> 
... 
<dependencies> 
<dependency> 
     <groupId>org.myorg.test</groupId> 
    <artifactId>module-one</artifactId> 
    <version>${module.one.version}</version> 
</dependency> 
</dependencies> 

這是正確的行爲?或者應該以不同的方式解析屬性module.one.version?

謝謝

回答

1

是的,這就是maven的工作原理。因此,我總是在pom中定義屬性的默認值,並在settings.xml或命令行或配置文件中覆蓋它們。由於存儲庫中的pom有更大的機會爲團隊中的其他開發人員順利工作。