当前位置: 首页 > 面试题库 >

在运行时获取Maven工件版本

严琨
2023-03-14
问题内容

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

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

是否有建议的方式在运行时读取此版本?


问题答案:

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

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

相反,必须修改的设置<archive>元素maven-jar-pluginto set addDefaultImplementationEntriesaddDefaultSpecificationEntriesto 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>

理想情况下,应将此配置放入公司pom或其他基本pom中。

<archive>元素的详细文档可以在Maven存档文档中找到。



 类似资料:
  • 问题内容: 当我遇到这个问题在运行时获取Maven工件版本时,我一直在寻找如何从maven pom或清单中获取应用程序名称(工件ID)和版本。 当我打包项目时,上面的内容对我有用,但是当我尝试使用eclipse运行程序时,似乎什么也没用。我在构建时尝试使用.properties方法,因为我认为这与包无关,但仍然没有得到结果。如果有人对这个问题有想法或解决方案,将不胜感激。 我的最后一次尝试是在下面

  • 我最后一次尝试在下面。这会在打包时使用清单(这会起作用),并在Eclipse中运行时尝试获取.properties文件。

  • 问题内容: 我需要解决JDK 1.5中的Java错误,该错误已在1.6中修复。我正在使用以下条件: 这对其他JVM有用吗?有更好的方法来检查吗? 问题答案: 是每个JVM中都存在的系统属性。有两种可能的格式: Java的8或降低:1.6.0_23,1.7.0,1.7.0_80,1.8.0_211 Java的9或更高:9.0.1,11.0.4,12,12.0.1 这是提取主要版本的技巧:如果它是版本

  • 问题内容: 我想知道是否有可能在运行时检索该类来自的jar的版本号? 我知道可以找到该类来自的jar: 但是版本呢? (假设其不在文件名中:) 问题答案:

  • 我想知道是否可以在运行时检索类的来源的jar的版本号? 我知道有可能找到类的来源: 但是一个版本呢? (假设它不在文件名中:))

  • 在运行时是否可以获得my war的maven deploy插件在运行时生成的完整工件版本/内部版本号? 如果maven进程生成并打包了一个包含值的属性文件,就可以了。 请记住,我的项目为每个部署生成唯一的(有时间戳的)工件版本。