我在maven中有一个包含5个模块的项目。现在,当我进行“mvn clean install”时,它会生成一个包含两个罐子的耳朵,一个是战争,一个是来自其他模块的sar。
所有文件名都包含版本,例如projectx-ear-2.0.0.ear,projectx-client-2.0.0.jar等。
我需要重命名其中一个罐子和最后一个耳朵以省略文件名中的版本。它应该是这样的:
projectx-ear.ear
|
+-- projectx-client.jar
|
+-- projectx-misc-2.0.0.jar
|
+-- projectx-sar-2.0.0.sar
|
\-- projectx-web-2.0.0.web
现在我正在使用以下插件来构建: maven-compiler-plugin和maven-release-plugin
实现我期望的结果的最佳方式是什么?
答案 0 :(得分:91)
您可以通过在pom中指定finalName
属性来实现此目的:
<build>
<finalName>${project.artifactId}</finalName>
</build>
答案 1 :(得分:21)
在您的ear模块中,您可以使用project.build.finalName
元素,也可以配置支持maven-ear-plugin可选参数的finalName
。要配置捆绑jar的最终名称,您需要定义jarModule
并为其设置bundleFileName
属性。
最终配置可能看起来像这样(我将演示如何在插件配置中设置最终的耳朵名称):
<project>
[...]
<dependencies>
<dependency>
<groupId>yourgroupid</groupId>
<artifactId>projectx-client</artifactId>
<version>2.0.0</version><!-- not mandatory if inherited -->
</dependency>
[...]
</dependencies>
[...]
<build>
[...]
<plugins>
[...]
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.4</version>
<configuration>
<finalName>projectx-ear</finalName>
<modules>
<jarModule>
<groupId>yourgroupid</groupId>
<artifactId>projectx-client</artifactId>
<bundleFileName>anotherName.jar</bundleFileName>
</jarModule>
</modules>
</configuration>
</plugin>
[...]
</project>
答案 2 :(得分:0)
第一点:单个JAR / WAR。
要在名称中不包含版本号的情况下创建它,只需在pom.xml中添加以下代码即可:
<build>
<finalName>${project.artifactId}</finalName>
</build>
因此,如果您进行编译(例如projectx_misc),则会得到 projectx_misc.jar 。
我怎么了?当我从POM项目(在Netbeans中)编译相同的程序包时,所有的jar都具有名称中的版本,而EAR包含xxx-version.jar档案。
所以,第二点是EAR问题。
在EAR的pom.xml文件中,更改 maven-ear-plugin 并在配置中添加以下属性:
<fileNameMapping>no-version</fileNameMapping>
例如,这是我的插件设置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.8</version>
<configuration>
<version>6</version>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<fileNameMapping>no-version</fileNameMapping>
</configuration>
</plugin>
因此,现在,当我从项目pom编译所有归档文件时,将从罐子中删除所有版本号。