私のプロジェクトには 2 つのバージョンがあります。
- プロジェクトがパッケージ化されたときに使用される私のPOM.xmlのバージョンなど。
- コードに定数を入れたバージョンなので、実行時にログに記録するときに使用できます。
これらはもちろん同じはずですが、ときどきどちらかを変更するのを忘れてしまいます。
このバージョンを一度だけ定義し、実行時に Maven とコードの両方で使用する良い方法はありますか?
http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-description.html
これを見てください。バージョン番号を参照する特定のプロパティを持つプロパティ ファイルが必要です。また、フィルタリングを使用すると、maven アーティファクトとアプリケーションの両方で同じバージョンを設定できます。
Maven を使用してアプリケーションをパッケージ化すると、Maven は directory を生成しMETA-INF/maven/<groupId>/<artifactId>/pom.properties
ます。そのファイルには、POM に従ってプロジェクトのバージョンが含まれており、バージョン番号を読み取るために、実行時に JAR ファイルからそのファイルをロードできます。
唯一のことは、このファイルはパッケージ化されたプロジェクト (JAR、WAR、または EAR) にのみ存在するということです。ワークベンチからコードを実行するときのフォールバック メカニズムを書きたいと思うかもしれません。
これは、pom ファイルで指定されたバージョンが必要な場合に通常使用するコードです。
private final static String GROUP_ID = "my.group";
private final static String ARTIFACT_ID = "my-artifact";
private String getVersion() {
String propFileName = "META-INF/maven/" + GROUP_ID + "/" + ARTIFACT_ID + "/pom.properties";
Properties properties = new Properties();
String version = "n/a";
try {
InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(propFileName);
if (inStream != null) {
properties.load(inStream);
version = properties.getProperty("version", "n/a");
}
} catch (IOException e) { }
return version;
}
mthmulders が彼の回答で述べているように、このファイルはパッケージ化されたプロジェクトにのみ存在します(作業ディレクトリではなく、最終的な war/jar/any にあります)。