如何使maven构建从常量

时间:2016-12-01 10:13:37

标签: java maven

我有一个多模块项目。我已经介绍了一个属性app.version,我在pom.xml中的所有地方使用而不是版本:在version标签和模块部分的依赖项中。

我在Hudson环境中使用maven 3.1.1。

${app.version}替换写入的值(1.6.0-SNAPSHOT)后,真正经过而没有错误的构建顺序就消失了。

是什么导致了这个问题?

我在开始时收到了这样的警告,可能会影响吗?

[WARNING] Some problems were encountered while building the effective model     for com.mycompany.project:project-module:jar:2.4.0
[WARNING] 'version' contains an expression but should be a constant. @ com.mycompany.project:project-module:${app.version}, /var/lib/hudson/jobs/myJob TRUNK Maven/workspace/project-module/pom.xml, line 20, column 11

我需要解析pom.xml:s,所以层次结构如下,我给它:

main_pom
  |
   --- modules
  |      |
  |       --- all other modules
   --- test        |
                     module A
                   |   |
                   |    module B
                     module C

我让哈德森从main_pom开始。它最后处理main_pom。为什么? 它现在从所有其他模块部分中的随机部分开始,构建其他部分,然后是模块,test和main_pom。为什么这个疯狂的命令?

失败在模块A中。它首先构建,而不是模块B.

正确的顺序是从main_pom开始 - >模块B - >模块A等,但它直接从模块A开始。

修改

我的pom.xmls具有以下结构:

 <parent>
    <groupId>com.mycompany.project</groupId>
    <artifactId>modules or parent_pom</artifactId>
    <version>${app.version}</version>
    <relativePath>../modules or parent_pom</relativePath>
 </parent>

<dependency>
    <groupId>com.mycompany.project</groupId>
    <artifactId>some other module</artifactId>
    <version>${app.version}</version>
</dependency>

2 个答案:

答案 0 :(得分:1)

Maven 3.2.1或更高版本required可以在pom文件的主<version> corrdinate中干净地使用变量。

答案 1 :(得分:0)

我使用了以下内容,事情开始流动:

main_pom:

<version>${app.version}</version>

所有其他人:

<parent>
    <groupId>com.mycompany.project</groupId>
    <artifactId>modules or parent_pom</artifactId>
    <version>${app.version}</version>
    <relativePath>../modules or parent_pom</relativePath>
</parent>

<dependency>
    <groupId>com.mycompany.project</groupId>
    <artifactId>some other module</artifactId>
    <version>${project.version}</version> <---- here was before ${app.version}
</dependency>

在依赖项上使用project.version而不是app.version属性就成了伎俩。