如何在运行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” 。