我是Maven的新用户,并且很难让buildnumber-maven-plugin达到我的期望。本质上,我希望maven构建项目并创建结果的JAR文件,并在manifest.mf文件中设置内部版本号。我将在下面包含大部分pom.xml文件。我已经发布了一个相关的问题,但是这个问题是关于另一个问题的!
当我运行mvn clean compile软件包时,我看到以下错误:
[ERROR] Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create (buildnumber) on project xcase: Execution buildnumber of goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create failed: The scm url cannot be null. -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
我已经将doCheck和doUpdate都设置为false,所以不知道为什么要参与SCM。我的解决方法是添加一些虚拟SCM配置,但这感觉很笨拙。有没有更好的办法?
<scm>
<connection>scm:svn:http://127.0.0.1/dummy</connection>
<developerConnection>scm:svn:https://127.0.0.1/dummy</developerConnection>
<tag>HEAD</tag>
<url>http://127.0.0.1/dummy</url>
</scm>
Run Code Online (Sandbox Code Playgroud)
这是我的pom.xml文件的build部分:
<build>
<outputDirectory>build</outputDirectory>
<plugins>
<plugin>
<artifactId>buildnumber-maven-plugin</artifactId>
<configuration>
<buildNumberPropertyName>buildNumber</buildNumberPropertyName>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<format>{0,number,integer}</format>
<items>
<item>buildNumber</item>
</items>
<revisionOnScmFailure>true</revisionOnScmFailure>
</configuration>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
<id>buildnumber</id>
</execution>
</executions>
<groupId>org.codehaus.mojo</groupId>
<version>1.4</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/build</outputDirectory>
<resources>
<resource>
<directory>${basedir}</directory>
<filtering>true</filtering>
<excludes>
<exclude>*local*.properties</exclude>
</excludes>
<includes>
<include>*.properties</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/java</directory>
<filtering>true</filtering>
<includes>
<include>log4j2.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Implementation-Build>${buildNumber}</Implementation-Build>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
<sourceDirectory>src/java</sourceDirectory>
</build>
Run Code Online (Sandbox Code Playgroud)
根据buildnumber:create 文档,这个插件是专门为与 SCM 配合使用而创建的:
内部版本号基于从 SCM 检索到的修订号。众所周知,它可以与 Subversion、GIT 和 Mercurial 配合使用。
因此,为了实现您的意图,您不应该使用此插件,而需要使用不同的方法。
默认的maven安装提供了一些特殊的变量,其中一个名为的变量maven.build.timestamp,它给你一个时间戳。您可以使用控制格式
<properties>
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
</properties>
Run Code Online (Sandbox Code Playgroud)
遵循SimpleDateFormat规则。您可以使用它${maven.build.timestamp}来获取内部版本号的格式化时间戳。
配置本地构建的默认值:
<properties>
<buildNumber>0</buildNumber>
<properties>
Run Code Online (Sandbox Code Playgroud)
在 CI 中通过命令行显式提供该值:
./mvnw clean deploy -DbuildNumber=...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3295 次 |
| 最近记录: |