有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Maven在打包jar时无法检索buildNumber

我正在使用buildnumber maven插件为我的jar生成序列号。我将在CICD过程中使用它

我遵循了网上所有的例子。但是,我可以得到${buildNumber}来打印它,但是在打包jar时,我不能得到这个数字,我得到了${buildNumber}文本。我搜索了Maven LifeCycle,发现我需要在任何其他插件之前将其添加到验证中。但我还是不能解决这个问题

  <project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>${group.id}</groupId>
    <artifactId>${artifact.id}</artifactId>
    <version>${model.version}</version>
    <profiles>
        <profile>
            <id>scala-2.11</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <dependencies>

        ......
            </dependencies>
        </profile>
    </profiles>
    <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>

    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <finalName>${artifact.id}.${model.version}</finalName>
        <plugins>
            <!-- buildnumber-maven-plugin for automatic increment the version number -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.4</version>
                <configuration>
                    <buildNumberPropertiesFileLocation>${build.number.dir}</buildNumberPropertiesFileLocation>
                    <revisionOnScmFailure>no.scm.config.in.pom</revisionOnScmFailure>
                    <doCheck>true</doCheck>
                    <doUpdate>true</doUpdate>
                    <format>{0,number}</format>
                    <items>
                        <item>buildNumber</item>
                    </items>
                </configuration>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
                <version>1.0-alpha-2</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>read-project-properties</goal>
                        </goals>
                        <configuration>
                            <files>
                                <file>${build.number.dir}</file>
                            </files>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <echo>current build number is "${buildNumber}"</echo>
                            </target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- ================== ;-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <source>${java.source.version}</source>
                    <target>${java.source.version}</target>
                    <skipMain>true</skipMain> <!-- skip compile -->
                    <skip>true</skip> <!-- skip testCompile -->
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>${maven.assembly.plugin.version}</version>
                <executions>
                    <execution>
                        <id>jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <appendAssemblyId>false</appendAssemblyId>
                            <descriptors>
                                <descriptor>
                                    src/main/assembly/assembly-jar.xml
                                </descriptor>
                            </descriptors>
                            <finalName>${artifact.id}</finalName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>bin</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <appendAssemblyId>false</appendAssemblyId>
                            <descriptors>
                                <descriptor>
                                    src/main/assembly/assembly-bin.xml
                                </descriptor>
                            </descriptors>
                            <finalName>${tar.name}</finalName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>



    <properties>
        <argLine>-Dfile.encoding=UTF-8 -Dlog4j.skipJansi=false -DmodelLogLevel=${modelLogLevel}</argLine>
        <modelLogLevel>DEBUG</modelLogLevel>
            <build.number.dir>${project.basedir}/buildNumber.properties</build.number.dir>
        <java.source.version>1.8</java.source.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>


        <!-- Plugin Versions -->
        <maven.compiler.plugin.version>3.6.2</maven.compiler.plugin.version>
        <maven.reports.plugin.version>2.9</maven.reports.plugin.version>
        <maven.assembly.plugin.version>3.1.0</maven.assembly.plugin.version>
        <surefire.plugin.version>2.7</surefire.plugin.version>

        <group.id>com.test.model_name</group.id>
        <artifact.id>proj_abc</artifact.id>
        <build.type>snapshot</build.type>
        <major.minor.version>0.1</major.minor.version>
            <!-- here I am trying to retrieve the actual number-->
        <build.number>${buildNumber}</build.number>
        <model.version>${major.minor.version}.${build.number}.${build.type}</model.version>
    </properties>

</project>

注意:如果我运行validate,我可以在下面找到echo消息,这意味着我可以从属性文件中正确地获取数字。如果我运行包或运行,我得到${artifact.id}\u source-.0.1${buildNumber}。没有数字的快照

main:
     [echo] current build number is "90"

我也检查了这个类似的问题here&enter link description here和其他链接,但无法解决问题


共 (1) 个答案

  1. # 1 楼答案

    我认为这里发生的是Maven在构建过程开始时解析属性

    <build.number>${buildNumber}</build.number>
    <model.version>${major.minor.version}.${build.number}.${build.type}</model.version>
    

    当它解析build.number时,${buildNumber}没有值。因此,它保持变量名不变。如果你把model.version修改成这样,我怀疑你也会遇到同样的问题:

    <model.version>${major.minor.version}.${buildNumber}.${build.type}</model.version>
    

    出于同样的原因

    您可以尝试使用this answer中描述的build-helper-maven-plugin。但是,这可能仍然不起作用,因为model.version被用作project.version的值,它很早就被解析为GAV坐标的一部分。不过值得一试