maven buildnumber插件错误scm url不能为null

use*_*582 6 java maven

我是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)

urs*_*rsa 1

根据buildnumber:create 文档,这个插件是专门为与 SCM 配合使用而创建的:

内部版本号基于从 SCM 检索到的修订号。众所周知,它可以与 Subversion、GIT 和 Mercurial 配合使用。

因此,为了实现您的意图,您不应该使用此插件,而需要使用不同的方法。

方法1.构建时间戳

默认的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}来获取内部版本号的格式化时间戳。

方法2.CI集成

配置本地构建的默认值:

<properties>
    <buildNumber>0</buildNumber>
<properties>
Run Code Online (Sandbox Code Playgroud)

在 CI 中通过命令行显式提供该值:

./mvnw clean deploy -DbuildNumber=...
Run Code Online (Sandbox Code Playgroud)