使用Maven从文件名中删除版本号

50

我有一个包含5个模块的Maven项目。当前,当我执行"mvn clean install"时,它会生成一个ear文件,其中包含来自其他模块的两个jar文件、一个war文件和一个sar文件。

所有文件名都包含版本号,例如projectx-ear-2.0.0.ear,projectx-client-2.0.0.jar等。

我需要将其中一个jar文件和最终的ear文件重命名,以省略文件名中的版本号。它应该看起来像这样:

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

实现我期望的结果的最佳方法是什么?

3个回答

117
您可以通过在pom文件中指定finalName属性来实现此功能,例如:
<build>
    <finalName>${project.artifactId}</finalName>
</build>

23
在你的 ear 模块中,你可以使用 project.build.finalName 元素或者配置一个支持 maven-ear-plugin 的可选参数 finalName。而要配置捆绑的 jar 最终名称,你需要定义一个 jarModule 并设置其 bundleFileName 属性。
最终的配置可能如下所示(我将演示如何在插件配置中设置最终 ear 名称):
<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>

3
目前,插件的较新版本(我正在使用2.6)允许您在<configuration>标签内指定一个<fileNameMapping>no-version</fileNameMapping>,以删除模块的版本号(因此您不必定义每个模块的版本号)。但是,EAR文件名不受此影响。 - SJuan76

2

第一点:单个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编译所有档案时,所有jar包的版本号都被删除了。


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