在运行时获取 Maven 工件版本

2022-08-31 06:29:20

我注意到,在 Maven 工件的 JAR 中,project.version 属性包含在两个文件中:

META-INF/maven/${groupId}/${artifactId}/pom.properties
META-INF/maven/${groupId}/${artifactId}/pom.xml

是否有推荐的方法可以在运行时读取此版本?


答案 1

您不需要访问特定于 Maven 的文件即可获取任何给定库/类的版本信息。

您可以简单地用于获取存储在.jar文件中的版本信息。幸运的是,Maven足够聪明不幸的是,默认情况下,Maven也不会将正确的信息写入清单!getClass().getPackage().getImplementationVersion()MANIFEST.MF

相反,必须修改要设置和的配置元素,如下所示:<archive>maven-jar-pluginaddDefaultImplementationEntriesaddDefaultSpecificationEntriestrue

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


答案 2

为了跟进上面的答案,对于工件,我发现我必须将等效的配置应用于 ,而不是:.warmaven-war-pluginmaven-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.MFWEB-INF/lib.war)


推荐