有没有办法在POM中使用maven pad数值(例如:内部版本号)?我一直在谷歌上搜索这个话题,还没有想出任何东西。
我的用例如下。 maven构建过程通过Jenkins提供构建号,需要将其作为生成的WAR名称的一部分包含在内。因此,如果我提供12作为内部版本号,那么我希望WAR文件名为myWar ## 000012.war。 ## 000012部分名称是Tomcat使用的版本标识符。
答案 0 :(得分:1)
最简单的解决方案可能是在您的构建中嵌入脚本语言。例如,使用Groovy,如果您有buildNumber
属性:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>validate</phase>
<goals><goal>execute</goal></goals>
<configuration>
<source>
project.properties['nameSuffix'] = "##" + String.format("%06d", project.properties['buildNumber'].toLong());
</source>
</configuration>
</execution>
</executions>
</plugin>
之后,nameSuffix
属性可用于定义最终名称。
或者,如In Maven, how can I dynamically build a property value at runtime?中所述,使用build-helper:regex-property
转换字符串。
答案 1 :(得分:0)
您是否尝试过使用maven release插件?
答案 2 :(得分:0)
根据@Joe的建议,我查看了build-helper-maven-plugin,并能够提出以下内容,它可以满足我的需求。我无法一步确定如何完成所有操作,所以我在2中完成。第一步用零填充左边的值。第二步修剪数值,使其仅为7位数。请注意,$ {build.env.version}作为参数传递给maven构建过程,并且我在POM文件中将其默认为0,以便在不传递时。如果未提供默认值,则即使将failOnError设置为false,构建也会失败。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>stage1--padNumber</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>build.env.version.padded</name>
<value>${build.env.version}</value>
<regex>^([\d]{0,})$</regex>
<replacement>000000$1</replacement>
<failIfNoMatch>false</failIfNoMatch>
<failOnError>false</failOnError>
</configuration>
</execution>
<execution>
<id>stage2--leftTrimToXcharacters</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>build.env.version.padded</name>
<value>${build.env.version.padded}</value>
<regex>^([\d]*)([\d]{7})$</regex>
<replacement>$2</replacement>
<failIfNoMatch>false</failIfNoMatch>
<failOnError>false</failOnError>
</configuration>
</execution>
</executions>
</plugin>
答案 3 :(得分:0)
根据@ jwmajors81建议,我需要填写主要版本,因为特定原因......
由于我们已经在使用build-helper-maven-plugin,因此使用build helper的parse-version目标很容易获得主要版本。 (我们只需要3个字符):
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>parse-version</id>
<goals>
<goal>parse-version</goal>
</goals>
</execution>
<execution>
<id>stage1--padNumber</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>build.env.version.padded</name>
<value>${parsedVersion.majorVersion}</value>
<regex>^([\d]{0,})$</regex>
<replacement>00$1</replacement>
<failIfNoMatch>false</failIfNoMatch>
<failOnError>false</failOnError>
</configuration>
</execution>
<execution>
<id>stage2--leftTrimToXcharacters</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>build.env.version.padded</name>
<value>${build.env.version.padded}</value>
<regex>^([\d]*)([\d]{3})$</regex>
<replacement>$2</replacement>
<failIfNoMatch>false</failIfNoMatch>
<failOnError>false</failOnError>
</configuration>
</execution>
</executions>
</plugin>
答案 4 :(得分:0)
但是,在这种情况下,如果您还需要生成一个buildNumber,buildnumber-maven-plugin可能是最直接的解决方案:
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<format>{0, number,000000}</format>
<items>
<item>buildNumber</item>
</items>
</configuration>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>myWar##${buildNumber}</finalName>