一尘不染

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

tomcat

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

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

java.lang.Package

包对象包含有关Java包的实现和规范的版本信息。加载该类的ClassLoader实例将检索此版本信息并使其可用。通常,它存储在与类一起分发的清单中。

更新。在我添加用于战争构建的配置之前。但是当从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>

阅读 264

收藏
2020-06-16

共1个答案

一尘不染

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

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);
2020-06-16