簡體   English   中英

Maven:如何在多模塊項目中包含 ${project.version}

[英]Maven: How to include ${project.version} in multi-module project

我正在使用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>

核心/pom.xml

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

一切都很好,直到這里意味着core/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.xmlprojectA/pom.xml繼承${project.version}

一般來說,只是不要在孩子中包含一個版本; 它會繼承它。 如果您必須指定一個版本(Roo 因使用它不認可的有效 POM 發脾氣而臭名昭著),您可以使用屬性指定父版本或使用${project.parent.version}作為子版本。 另請查看versions插件,它將立即在整個層次結構上設置版本。

首先,您不能在版本中使用屬性:

項目A/pom.xml

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

其次,您不需要在孩子中使用相對路徑:core/pom.xml

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

如果你有一個persistence/pom.xml,這讓我明白了這一點

核心 com.org 1.0.0-快照

使用諸如<relativePath>../../</relativePath>這通常表明您的結構是錯誤的。

但是:從 Maven 3.2.1 開始,您可以使用特殊屬性來定義您喜歡的版本。 版本中允許使用以下占位符:

${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>

但這意味着您每次都需要像這樣調用 maven:

mvn -Drevision=1.0.0-SNAPSHOT clean package

這將工作。 如果您在 Eclipse 等中使用您的項目,則必須小心。除上述之外,我不建議以這種方式使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM