maven 程序包.getImplementationVersion()返回NULL

5gfr0r5j  于 2022-11-02  发布在  Maven
关注(0)|答案(1)|浏览(208)

提前感谢您的帮助。
我想要实现的是项目版本(Implementation-Version)在初始化时被打印在一个类中,这样我就可以从日志文件跟踪版本。
我构建了一个包含以下类的JAR文件:

com.company.core.common.ClassA
com.company.core.security.ClassB
com.company.core.sql.ClassC

com.company.core.sql.ClassC的构造函数中,我想通过调用this.class.getPackage().getImplementationVersion()来调用System.out.println(),以打印出存储在META-INF/MANIFEST.MF文件中的Implementation-Version,但通过Maven测试类初始化该类时,它正在获取null值。
我的MANIFEST.MF文件包含以下详细信息:

Manifest-Version: 1.0
Implementation-Title: Company Core Library
Implementation-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: simon
Implementation-Vendor-Id: com.company.core
Build-Time: 2017-02-18T15:07:33Z
Class-Path: lib/sqljdbc42-4.2.jar lib/log4j-api-2.7.jar lib/log4j-core
 -2.7.jar lib/json-20160810.jar lib/junit-4.12.jar lib/hamcrest-core-1
 .3.jar
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_102
Implementation-Vendor: Company

Name: com/company/core/
Implementation-Vendor-Id: com.company.core
Implementation-Title: Company Core Library
Implementation-Version: 1.0
Implementation-Vendor: Company

我能在Maven测试类中获得Implementation-Version吗?如果能,我在这里错过了什么?

  • 谢谢-谢谢
    你好,西蒙。
b09cbbtk

b09cbbtk1#

在开发环境中,所有类文件都可以在指定的文件夹目标中找到(例如在Eclipse中)。包路径表示为目录结构。对于目录结构,未定义是否存在清单。因此,专用类加载器将忽略所有清单请求。这就是调用返回空值的原因。
在生产环境中运行时,您的产品被打包在一个jar文件中。在这种情况下,它被定义为存在一个清单文件。jar文件类加载器知道清单文件,并将正确显示版本信息。
我们提供了一个默认的“实现版本”(如果在开发环境中检索到该版本),这对我们很有帮助。

相关问题