我有一个项目,它是使用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>
答案 0 :(得分:2)
BUILD.txt
更改为包含buildNumber=NNN
${buildNumber}
<finalName>
BUILD.txt
${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
文件的负担。