【发布时间】:2013-06-06 03:55:03
【问题描述】:
当我将 mvn 项目导入 Intellij 时,它生成的 jar 文件不包含版本。但是 mvn 生成的 jar 具有name-version.jar 格式。所以我最终得到了两个 jar 文件,一个带有版本,另一个没有版本。我当然可以在 Intellij 设置中更改模块名称以包含版本。但是每当我更改 pom 文件时,它都会被重置。
也许其他人有更好的主意?
【问题讨论】:
标签: maven intellij-idea
当我将 mvn 项目导入 Intellij 时,它生成的 jar 文件不包含版本。但是 mvn 生成的 jar 具有name-version.jar 格式。所以我最终得到了两个 jar 文件,一个带有版本,另一个没有版本。我当然可以在 Intellij 设置中更改模块名称以包含版本。但是每当我更改 pom 文件时,它都会被重置。
也许其他人有更好的主意?
【问题讨论】:
标签: maven intellij-idea
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 文件的名称。
maven-war-plugin 来生成爆炸战争。
WEB-INF/lib 结尾的.jar 文件,那么由outputFileNameMapping 控制的类似@{artifact.artifactId}.@{artifact.extension} 的文件应该具有您所追求的效果,但更好解决方案(以及推荐的解决方案 BTW)是在一个单独的模块中完全构建 .jar 并将其作为依赖项引入
使用maven的版本标签
<version>0.0.1-SNAPSHOT</version>
不要让intellij创建没有版本标签的jar文件。
【讨论】: