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

2023-11-23

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

我尝试 getClass().getPackage().getImplementationVersion() 但这总是返回null。 我猜这是因为我的战争尚未打包,而 Tomcat 执行了 .classes(又名爆炸战争)。META-INF\MANIFEST.MF出现在最终战争中,但不在target\<project.name>\META-INF folder

java.lang.Package

包对象包含有关实现的版本信息 以及 Java 包的规范。该版本控制信息是 由加载的 ClassLoader 实例检索并使其可用 班级。通常,它存储在清单中 随班级分发。

相关的是在运行时获取 Maven 工件版本

更新。在我已经添加了战争构建的配置之前。但是当从 Eclipse 运行 Tomcat 时,我得到null.

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <archive>                   
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
        </archive>
        <!-- this actually moves classes from \WEB-INF\classes to new jar 
        <archiveClasses>true</archiveClasses>
        -->
    </configuration>
</plugin>

解决了
1) 在 webapp 文件夹中创建 META-INF\MANIFEST.MFmvn war:manifest
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 中运行的 Web 应用程序的清单文件?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行 Tomcat 时获取软件包版本? 的相关文章

随机推荐