提前感谢您的帮助。
我想要实现的是项目版本(Implementation-Version
)在启动时打印在类中,以便我可以从日志文件中跟踪版本。
我构建了一个包含以下类的JAR文件:
com.company.core.common.ClassA
com.company.core.security.ClassB
com.company.core.sql.ClassC
在com.company.core.sql.ClassC
的构造函数中,我想通过调用System.out.println()
来调用Implementation-Version
打印出存储在META-INF/MANIFEST.MF
文件中的this.class.getPackage().getImplementationVersion()
,但它正在获取通过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
吗?
如果是的话,我错过了什么?
感谢。
此致 西蒙。
答案 0 :(得分:0)
在开发环境中,所有类文件都可以在命名文件夹目标中找到(例如在 Eclipse 中)。包路径表示为目录结构。对于目录结构,未定义清单的存在。因此,专用类加载器将忽略对清单的所有请求。这就是调用返回 null 的原因。
在生产环境中运行,您的产品打包在 jar 文件中。在这种情况下,它被定义为有一个清单文件。 jar 文件类加载器知道清单文件,并将正确显示版本信息。
如果在开发环境中检索到版本,我们通过提供默认的“实施版本”来帮助我们。