【问题标题】:Removing version number from file name with Maven使用 Maven 从文件名中删除版本号
【发布时间】:2011-01-14 13:43:52
【问题描述】:

我在 Maven 中有一个包含 5 个模块的项目。现在,当我执行“mvn clean install”时,它会生成一个包含两个 jar 的 ear,一个是 war,一个是来自其他模块的 sar。

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

我需要重命名其中一个 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

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

【问题讨论】:

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


    【解决方案1】:

    您可以通过在 pom 中指定 finalName 属性来实现这一点,如下所示:

    <build>
        <finalName>${project.artifactId}</finalName>
    </build>
    

    【讨论】:

      【解决方案2】:

      在您的耳塞中,您可以使用project.build.finalName 元素,也可以配置支持finalName 可选参数的maven-ear-plugin。要配置捆绑 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.6)允许您在 &lt;configuration&gt; 中指定一个 &lt;fileNameMapping&gt;no-version&lt;/fileNameMapping&gt; 以删除模块的版本号(因此您不必定义它们中的每一个)。不过,耳朵名称不受此影响。
      【解决方案3】:

      第一点:单个 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 中删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 2018-01-16
        • 1970-01-01
        • 2016-10-16
        • 2014-10-28
        • 1970-01-01
        • 2012-01-22
        相关资源
        最近更新 更多