在运行时获取 Maven 工件版本
我注意到,在 Maven 工件的 JAR 中,project.version 属性包含在两个文件中:
META-INF/maven/${groupId}/${artifactId}/pom.properties
META-INF/maven/${groupId}/${artifactId}/pom.xml
是否有推荐的方法可以在运行时读取此版本?
我注意到,在 Maven 工件的 JAR 中,project.version 属性包含在两个文件中:
META-INF/maven/${groupId}/${artifactId}/pom.properties
META-INF/maven/${groupId}/${artifactId}/pom.xml
是否有推荐的方法可以在运行时读取此版本?
您不需要访问特定于 Maven 的文件即可获取任何给定库/类的版本信息。
您可以简单地用于获取存储在.jar文件中的版本信息。幸运的是,Maven足够聪明不幸的是,默认情况下,Maven也不会将正确的信息写入清单!getClass().getPackage().getImplementationVersion()
MANIFEST.MF
相反,必须修改要设置和的配置元素,如下所示:<archive>
maven-jar-plugin
addDefaultImplementationEntries
addDefaultSpecificationEntries
true
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
理想情况下,这种配置应该放在公司或其他base-pom中。pom
该元素的详细文档可以在Maven Archive文档中找到。<archive>
为了跟进上面的答案,对于工件,我发现我必须将等效的配置应用于 ,而不是:.war
maven-war-plugin
maven-jar-plugin
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
这会将版本信息添加到项目的.jar
(包含在MANIFEST.MF
WEB-INF/lib
.war
)