如何在运行Tomcat时获取软件包版本?

如何在运行Tomcat时获取软件包版本?

我尝试getClass()。getPackage()。getImplementationVersion()但这总是返回null 。 我想这是因为我的战争尚未打包,Tomcat执行.classes(又名爆炸战争)。 META-INF\MANIFEST.MF存在于最终战争中,但不存在于target\\META-INF文件夹中

java.lang.Package中

包对象包含有关Java包的实现和规范的版本信息。 检索此版本控制信息,并由加载类的ClassLoader实例提供。 通常,它存储在随类分发的清单中。

相关的是运行时的Get Maven工件版本

UPDATE。 在我已经为war build添加配置之前。 但是当从Eclipse运行Tomcat时,我得到null

  maven-war-plugin 2.1    true true   <!-- this actually moves classes from \WEB-INF\classes to new jar true -->   

解决了
1)使用mvn war:manifest manifest在webapp文件夹中创建META-INF \ MANIFEST.MF
2)编码

 version = getClass().getPackage().getImplementationVersion(); if (version==null) { Properties prop = new Properties(); try { prop.load(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF")); version = prop.getProperty("Implementation-Version"); } catch (IOException e) { logger.error(e.toString()); } } logger.info("Starting App version "+version); 

感谢@javadude回答我如何读取在apache tomcat中运行的webapp的清单文件?

包的版本/标题/供应商信息的正常来源是JAR文件清单中的属性。 请参阅JAR文件规范 。

如果getters返回null ,则表示尚未指定相应的属性。 (这对于常规JAR文件也是正常的。)

是的,它与链接的问题有关。 接受的答案描述了如何告诉Maven将一些Maven版本的详细信息添加到JAR清单中,以便您可以使用Package API在运行时访问它们。


如何在运行Tomcat时获取软件包版本?

您需要创建JAR文件,并将版本信息放入相应的JAR清单中。 显然,您也可以在WAR文件级别执行此操作。

参考:Fred Puls的“Deploy:War File Versioning and Manifest Reader” 。