2

我有以下 pom.xml

<project>
  <properties>
    <buildNumber>dev</buildNumber>
  </properties>
  <build>
    <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
  </build>
</project>

这在开发机器上运行良好。如果我跑mvn package,我有project-1.1-dev.war神器。如果我跑步mvn package -DbuildNumber=121,我有package-1.1-121.war.

project-1.1-dev.war但是尽管属性传递给了 maven,但 CI 服务器(TeamCity)总是得到buildNumber(如果我从中删除默认属性定义pom.xml,maven 会使用正确的文件名构建工件)。

似乎系统属性解析优先级在某种程度上取决于平台(开发人员机器和 TC - 2.2.1 上的 Maven 版本相等)?

4

3 回答 3

1

这有点奇怪......也许你不能强制命令行中给出的参数具有比<properties>标签中定义的最高优先级。

一个想法是使用定义属性的配置文件buildNumber

<profiles>
    <profile>
        <id>dev-property</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <buildNumber>dev</buildNumber>
        </properties>
    </profile>
</profiles>

所以默认情况下,buildNumber将等于dev值。现在,在您的 TeamCity 命令行中,使用命令禁用此配置文件mvn ... -P !dev-property!配置文件 id 之前表示必须禁用该配置文件)。

于 2010-09-15T06:34:40.777 回答
1

您的问题的答案在于 SO 上的另一个问题:Maven 属性重载

简而言之,你需要通过-DbuildNumber=121maven命令行(在“3构建步骤:maven”页面),因为在“6属性和变量”页面设置系统属性“buildNumber”不会覆盖maven属性。

于 2011-08-23T18:45:40.833 回答
-1

您熟悉SNAPSHOT版本的概念吗?听起来像您正在尝试做的事情,并且 Maven 开箱即用地支持。看起来您想要构建major-minor-incrementalmajor -minor- dev,如果您可以使用major-minor-incremental- SNAPSHOT而不是它应该做您想做的事情。

于 2010-09-15T06:42:14.613 回答