如何在JAR文件名中包含内部版本号?

时间:2015-11-27 09:30:37

标签: java maven maven-assembly-plugin

我有一个项目,它是使用Maven程序集插件构建的。

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

我有一个文件BUILD.txt,其中包含当前的内部版本号。

当我调用mvn assembly:single时,我希望maven-assembly-plugin生成一个名为myproduct-1.0-SNAPSHOT.BUILD.jar的JAR文件(包含所有依赖项),其中BUILD是来自BUILD.txt的文本(即, BUILD.txt包含172,结果JAR应该被称为myproduct-1.0-SNAPSHOT.172.jar)。

如何阅读BUILD.txt中的文字,以便我可以在程序集插件的finalName设置中使用它?

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <finalName>${project.build.finalName}.${build}.jar</finalName
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

4 个答案:

答案 0 :(得分:2)

方法1

  • 使用Maven Properties Plugin
  • 将您的BUILD.txt更改为包含buildNumber=NNN
  • 使用${buildNumber}
  • 的属性<finalName>

方法2

  • 假设您使用的是SCM,如SVN或Git
  • 无需再次使用BUILD.txt
  • 使用Maven Build Number Plugin
  • 使用${buildNumber}
  • 的属性<finalName>

答案 1 :(得分:1)

试试这个

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <finalName>${project.build.finalName}.${build}.jar</finalName
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <appendAssemblyId>false</appendAssemblyId>
</plugin>

使用appendAssemblyId,您将避免使用jar-with-dependencies后缀。您应该将BUILD.txt生成为属性文件,然后将其作为pom.xml中的普通属性文件进行访问

答案 2 :(得分:1)

你可以这样做:

<build>
  <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        ...

将它放在你的pom(构建部分)中,然后配置它来访问你的scm。 然后定义你的bundleFileName,例如像这样

<bundleFileName>${project.artifactId}-${project.version}.jar</bundleFileName>

答案 3 :(得分:1)

如果您无法控制此构建文件的创建且无法更改其内容,则执行此操作的方法是使用带有maven-antrun-plugin的Ant任务读取文件,将内容存储在属性然后使用该属性作为最终名称。

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.8</version>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <configuration>
        <target>
          <!-- this task will read the content of the file and store it inside the "build" property -->
          <loadfile property="build" srcFile="BUILD.txt" />
        </target>
        <exportAntProperties>true</exportAntProperties> <!-- Ant properties are not exported as Maven properties by default so we need to add it -->
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <finalName>${project.build.finalName}.${build}.jar</finalName
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <appendAssemblyId>false</appendAssemblyId>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase> <!-- bind the maven-assembly-plugin to the package phase instead -->
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

使用mvn clean install运行Maven将为程序集生成正确的名称。

但请注意,您可以使用已经自动处理内部版本号的buildnumber-maven-plugin代替执行此操作,从而免除了维护BUILD.txt文件的负担。