2014-04-24 44 views
1

我使用maven 3.2.1

mvn -version 
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-14T09:37:52-08:00) 
Maven home: /usr/local/Cellar/maven/3.2.1/libexec 
Java version: 1.7.0_55, vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac" 

我的模塊結構

projectA/ 
     pom.xml 
     core/ 
      pom.xml 
      business/ 
        pom.xml 
      persistence/ 
        pom.xml 
      rest/ 
        pom.xml 
     federated_services/ 
        pom.xml 

項目A/pom.xml的

<groupId>com.org</groupId> 
    <artifactId>projectA</artifactId> 
    <packaging>pom</packaging> 
    <version>${global.version}</version> 
    <properties> 
     <global.version>1.0-SNAPSHOT</global.version> 
    </properties> 

core/pom.xml

<parent> 
    <artifactId>projectA</artifactId> 
    <groupId>com.org</groupId> 
    <version>${global.version}</version> 
    <relativePath>..</relativePath> 
</parent> 

一切都很好,直到這裏指核心/ XML可以找到${project.version}。但是,當我做

持久性/ pom.xml的

<parent> 
     <artifactId>core</artifactId> 
     <groupId>com.org</groupId> 
     <version>${global.version}</version> 
     <relativePath>../../</relativePath> 
    </parent> 

POM的抱怨

[ERROR] The project com.org:persistence:${global.version} (/Users/harith/IdeaProjects/project/core/persistence/pom.xml) has 1 error 
[ERROR]  Non-resolvable parent POM: Could not transfer artifact com.org:core:pom:${global.version} from/to local central mirror (http://maven.corp.org.com:9999/repository/public): Illegal character in path at index 68: http://maven.corp.org.com:9999/repository/public/com/org/core/${global.version}/core-${global.version}.pom and 'parent.relativePath' points at wrong local POM @ line 5, column 13 -> [Help 2] 

問題
- 我怎麼能有持久性/ pom.xml的繼承${project.version} from projectA/pom.xml

回答

4

一般來說,只是不要在孩子中包含一個版本;它會繼承它。如果你必須指定一個版本(Roo是臭名昭着的發脾氣與它有效的POM它不贊同),你可以指定父版本的屬性或使用${project.parent.version}爲孩子的版本。另請參閱versions插件,它將一次設置整個層次結構的版本。

1

首先,一般不能在版本使用性質:

項目A/pom.xml的

<groupId>com.org</groupId> 
    <artifactId>projectA</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0.0-SNAPSHOT</version> 

第二你不應該需要在您的孩子使用相對路徑: 核心/pom.xml

<parent> 
    <artifactId>projectA</artifactId> 
    <groupId>com.org</groupId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 
<artifactId>core</artifactId> 

這使我給點意見,如果你有一個持久性/ pom.xml的

核心 com.org 1.0.0-SNAPSHOT

一樣,使用的東西像<relativePath>../../</relativePath>這通常是一個指標,你的結構錯誤。

但是:Starting with Maven 3.2.1 you can use special properties來定義你喜歡的版本。The following placeholders are allowed in versions:

${revision}, ${changelist}, and ${sha1} 

這意味着,如果你喜歡,你可以使用它們,但只有與Maven 3.2.1所以你需要將其更改爲這樣的事情:

項目A/pom.xml的

<groupId>com.org</groupId> 
    <artifactId>projectA</artifactId> 
    <packaging>pom</packaging> 
    <version>${revision}</version> 

,並在核心:

<parent> 
    <artifactId>projectA</artifactId> 
    <groupId>com.org</groupId> 
    <version>${revision}</version> 
</parent> 
<artifactId>core</artifactId> 

但這意味着你需要調用行家每次這樣的:

mvn -Drevision=1.0.0-SNAPSHOT clean package 

這將正常工作。如果你在Eclipse中使用你的項目,你必須小心謹慎。除了上面這些,我不建議這樣使用它。

+0

你是什麼意思,你不能在版本中使用屬性?自從Maven 2以來,我一直在使用它們。它們只需要在本地可以解析。 – chrylis