重複を減らすため、コンパイル時にJavaクラスでmavenプレースホルダーを使用したいだけです。
そんな感じ:
pom.xml
<properties>
<some.version>1.0</some.version>
</properties>
SomeVersion.Java
package some.company;
public class SomeVersion {
public static String getVersion() {
return "${some.version}"
}
}
src/main/resourcesにapp.propertiesファイルをこのようなコンテンツで作成するだけです
application.version=${project.version}
次に、このようなMavenフィルタリングを有効にします
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
それだけです-アプリのコードではプロパティファイルを読むだけです
ClassPathResource resource = new ClassPathResource( "app.properties" );
p = new Properties();
InputStream inputStream = null;
try {
inputStream = resource.getInputStream();
p.load( inputStream );
} catch ( IOException e ) {
LOGGER.error( e.getMessage(), e );
} finally {
Closeables.closeQuietly( inputStream );
}
そして、このような方法を提供します
public static String projectVersion() {
return p.getProperty( "application.version" );
}
非常に素晴らしいソリューションではありませんが、デフォルトのMavenリソースプラグインで可能です。
まず、リソースプラグインを指定する必要があります。
<project>
<build>
<!-- Configure the source files as resources to be filtered
into a custom target directory -->
<resources>
<resource>
<directory>src/main/Java</directory>
<filtering>true</filtering>
<targetPath>../filtered-sources/Java</targetPath>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
その後、コンパイラプラグインの「デフォルト」設定を変更する必要があります。
<project>
<build>
<!-- Overrule the default pom source directory to match
our generated sources so the compiler will pick them up -->
<sourceDirectory>target/filtered-sources/Java</sourceDirectory>
</build>
</project>
私が知っている最も簡単な方法は、 Templating Maven Plugin を使用することです。
プラグイン宣言をpomに追加します。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>templating-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>filter-src</id>
<goals>
<goal>filter-sources</goal><!-- add this if you filter main sources -->
<goal>filter-test-sources</goal><!-- add this if you filter test sources -->
</goals>
</execution>
</executions>
</plugin>
メインソースをフィルタリングする場合:
src/main/Java-templates
を作成しますsrc/main
にいるかのように、パッケージツリー構造を再現します。テストソースもフィルタリングする場合:
src/test/Java-templates
を作成しますsrc/test
にいるかのように、パッケージツリー構造を再現します。ソースに次のような有効なプレースホルダーが含まれていると仮定します。
package some.company;
public class SomeVersion {
public static String getVersion() {
return "${project.version}"
}
}
これで、プロジェクトをcompile
またはtest
すると、それらのプレースホルダーはすでに評価されているはずです。
それが役に立てば幸い。
Springで作業している場合は、プロパティを注入できます。手順は次のとおりです。
<profile>
<id>dev</id>
<properties>
<some.version>Dev Value</some.version>
</properties>
</profile>
custom.some.version = $ {some.version}
<context:property-placeholder location="classpath*:/META-INF/*.properties"/>
...
<bean id="customConfig" class="com.brand.CustomConfig">
<property name="someVersion" value="${custom.some.version}" />
</bean>
...
package com.brand; public class CustomConfig { private String someVersion; public getSomeVersion() { return this.someVersion; } public setSomeVersion(String someVersion) { this.someVersion = someVersion; } }
package com.brand.sub public class YourLogicClass { @Autowired private CustomConfig customConfig; // ... your code }
最終コンパイルで、正しい値が得られます。