【问题标题】:Version in jar namejar 名称中的版本
【发布时间】:2013-06-06 03:55:03
【问题描述】:

当我将 mvn 项目导入 Intellij 时,它生成的 jar 文件不包含版本。但是 mvn 生成的 jar 具有name-version.jar 格式。所以我最终得到了两个 jar 文件,一个带有版本,另一个没有版本。我当然可以在 Intellij 设置中更改模块名称以包含版本。但是每当我更改 pom 文件时,它都会被重置。

也许其他人有更好的主意?

【问题讨论】:

    标签: maven intellij-idea


    【解决方案1】:

    Maven 生成的 jar 名称​​在磁盘上/project/build/finalName 控制,所以如果你编辑你的 pom.xml 看起来像

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

    然后 Maven 将生成没有版本的 jar 文件。

    注意

    finalName 只控制磁盘上文件的名称。一旦该文件被传输到本地存储库缓存或远程存储库,它将被重命名以匹配存储库布局(即${artifactId}-${version}.${type}${artifactId}-${version}-${classifier}.${type} 用于带有分类器的工件)。您无法更改存储库使用的格式。

    我添加上面的注释是因为每个人在了解finalName 参数后似乎想做的第一件事就是尝试更改存储库中的名称。

    【讨论】:

    • finalName 仅更改目标目录中的文件夹名称。它不会更改生成的 jar 文件的名称。
    • 检查你的有效 pom,因为除非你有覆盖默认值的东西,finalName controls the name of the jar file also
    • 我找不到任何东西。我使用战争包装和maven-war-plugin 来生成爆炸战争。
    • 好吧,如果您正在谈论以WEB-INF/lib 结尾的.jar 文件,那么由outputFileNameMapping 控制的类似@{artifact.artifactId}.@{artifact.extension} 的文件应该具有您所追求的效果,但更好解决方案(以及推荐的解决方案 BTW)是在一个单独的模块中完全构建 .jar 并将其作为依赖项引入
    【解决方案2】:

    使用maven的版本标签

    <version>0.0.1-SNAPSHOT</version>
    

    不要让intellij创建没有版本标签的jar文件。

    【讨论】:

    • 这就是我想要找出的。我应该如何强制 Intgellij 在文件名中包含版本?
    • intellij 不能不传递版本号,而且让 ide 自己构建版本控制也不安全。我建议您手动编写除子模块以外的所有版本。 (他们可以采用父版本号)
    猜你喜欢
    • 2014-12-19
    • 2016-09-14
    • 2015-10-03
    • 1970-01-01
    • 2023-03-08
    • 2020-10-05
    • 2019-06-09
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多