7

Tomcat の実行時にパッケージのバージョンを取得するには?

getClass().getPackage().getImplementationVersion() を試してみましたが、これは常に を返しますnull。私の戦争がまだパッケージ化されておらず、Tomcat が .classes (爆発した戦争) を実行しているためだと思います。 META-INF\MANIFEST.MF最終戦争には存在するが、target\<project.name>\META-INFフォルダには存在しない

java.lang.パッケージ

パッケージ オブジェクトには、Java パッケージの実装と仕様に関するバージョン情報が含まれています。このバージョン管理情報は、クラスをロードした ClassLoader インスタンスによって取得され、利用可能になります。通常、クラスとともに配布されるマニフェストに格納されます。

関連するのは、実行時に Maven アーティファクト バージョンを取得することです。

アップデート。war ビルドの構成を追加する前に。しかし、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>
4

2 に答える 2

17


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);

How do I read the manifest file for a webapp running in apache tomcat? での@javadude の回答に感謝します。

于 2013-02-19T05:36:48.077 に答える
2

パッケージのバージョン/タイトル/ベンダー情報の通常のソースは、JARファイルマニフェストの属性です。JARファイルの仕様を参照してください。

ゲッターが戻っnullた場合、それは対応する属性が指定されていないことを意味します。(これは通常のJARファイルでも正常です。)

はい、リンクされた質問に関連しています。Package受け入れられた回答は、MavenにMavenバージョンの詳細をJARマニフェストに追加して、 APIを使用して実行時にそれらにアクセスできるようにするために何をすべきかを説明しています。


Tomcatの実行時にパッケージバージョンを取得するにはどうすればよいですか?

JARファイルを作成し、バージョン情報をそれぞれのJARマニフェストに入れる必要があります。どうやら、WARファイルレベルでもこれを行うことができます。

参照:Fred Pulsによる「Deploy:War File VersioningandManifestReader」 。

于 2013-02-18T11:49:42.043 に答える