1. ホーム
  2. java

[解決済み] 実行時にMavenアーティファクトのバージョンを取得する

2022-04-15 14:45:34

質問

MavenアーティファクトのJARで、project.version属性が2つのファイルに含まれていることに気づきました。

META-INF/maven/${groupId}/${artifactId}/pom.properties
META-INF/maven/${groupId}/${artifactId}/pom.xml

このバージョンを実行時に読み取るための推奨される方法はありますか?

どのように解決するのですか?

任意のライブラリ/クラスのバージョン情報を取得するために、Maven固有のファイルにアクセスする必要がないようにする必要があります。

単に getClass().getPackage().getImplementationVersion() に格納されているバージョン情報を取得するために、.jarファイル MANIFEST.MF . <ストライク 幸いなことに、Mavenは賢いので 残念ながら、Maven はデフォルトではマニフェストにも正しい情報を書きません!

その代わりに <archive> の設定要素を使用します。 maven-jar-plugin を設定します。 addDefaultImplementationEntriesaddDefaultSpecificationEntries から true というように。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>                   
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
        </archive>
    </configuration>
</plugin>

理想的には、この構成は、会社 pom または別の base-pom を使用します。

の詳細なドキュメント <archive> 要素は Maven アーカイブのドキュメント .