Maven BuildNumber插件错误:SCM URL不能为空。

14

我是Maven的新用户,使用buildnumber-maven-plugin时遇到了困难。基本上,我想让maven构建我的项目并创建一个结果的JAR文件,并在manifest.mf文件中设置构建编号。我将在下面包含大部分的pom.xml文件。我已经发布了一个相关问题,但这个问题是关于另一个问题的!

当我运行“mvn clean compile package”时,我看到以下错误:

[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]

我已将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>

这是我的pom.xml文件的构建部分:

  <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>

你为什么要改变目录的约定?这是你必须学会的第一件事,要保持约定,直到你完全理解它们的意图以及如果你改变它们会产生的后果。通常情况下没有必要这样做。除非你有非常好的理由,否则不应该这样做。此外,build-number-maven-plugin提取修订版/git sha1作为构建号,可以注入到MANIFEST.MF文件中,以更好地识别工件。因此,你需要提供正确的SCM条目才能使build-number-maven-plugin正常工作...dummy没有意义... - khmarbaise
1个回答

0
根据 buildnumber:create docs,该插件是专门用于与 SCM 协同工作的:

构建号基于从 SCM 检索到的修订号。它已知可与 Subversion、GIT 和 Mercurial 一起使用。

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

方法一:构建时间戳

默认的 Maven 安装提供了 一些特殊变量,其中一个名为 maven.build.timestamp 的变量可以给出时间戳。您可以使用以下方式控制其格式:

<properties>
    <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
</properties>

遵循SimpleDateFormat规则。 您可以使用${maven.build.timestamp}获取格式化的时间戳以用于生成编号。

方法2. CI集成

为本地构建配置默认值:

<properties>
    <buildNumber>0</buildNumber>
<properties>

在CI中,可以通过命令行显式地提供此值:

./mvnw clean deploy -DbuildNumber=...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接