【问题标题】:How to get package version at running Tomcat?如何在运行 Tomcat 时获取软件包版本?
【发布时间】:2013-02-02 18:22:13
【问题描述】:

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

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

java.lang.Package

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

相关的是Get Maven artifact version at runtime

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

【问题讨论】:

    标签: java eclipse maven tomcat manifest.mf


    【解决方案1】:

    解决者
    1) 在 webapp 文件夹中创建 META-INF\MANIFEST.MF 并使用 mvn 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 在How do I read the manifest file for a webapp running in apache tomcat?的回答

    【讨论】:

      【解决方案2】:

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

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

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


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

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

      参考:"Deploy: War File Versioning and Manifest Reader" Fred Puls。

      【讨论】:

        猜你喜欢
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-11
        • 2016-03-02
        • 2015-01-09
        • 2011-02-12
        相关资源
        最近更新 更多