有効なアプローチの 1 つ: Maven フィルタリングを使用して、必要な情報を含むファイルを WAR または JAR に配置します。次に、Java Web アプリケーションで、そのファイルのコンテンツを ClassPath リソースとしてロードしますInputStream
。
次のようなファイル (「buildInfo.properties」としましょう) を作成しますsrc/main/resources
。
build.version=${project.version}
build.timestamp=${timestamp}
未解決の欠陥のため、pomtimestamp
のブロックで次のようにプロパティを定義する必要があることに注意してください。<properties>
`<timestamp>${maven.build.timestamp}</timestamp>`
ビルド中に、このファイルは project.version の値でフィルタリングされます (これは<version>
、指定時に pom.xml で定義します)。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
Java コード (JSF Bean など) には、次のようなコードがあります。
InputStream in = getClass().getClassLoader().getResourceAsStream("buildInfo.properties");
if (in == null)
return;
Properties props = new Properties();
props.load(in);
String version = props.getProperty("build.version");
// etc.
フレームワークがクラスパスからの「リソース バンドル」としてのプロパティのロードをサポートしている場合 (つまり、Spring のように)、プロパティ ファイルをロードする前述の Java コードは必要ありません。