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

时间:2010-02-08 21:52:01

标签: java build maven-2 ear maven-ear-plugin

我在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

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

3 个答案:

答案 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编译所有归档文件时,将从罐子中删除所有版本号。