Saya menggunakan plugin properti untuk menyelesaikan ini.
Properti didefinisikan di pom, dan ditulis ke file my.properties, yang kemudian dapat diakses dari kode Java Anda.
Dalam kasus saya itu adalah kode uji yang perlu mengakses file properti ini, jadi di pom file properti ditulis ke testOutputDirectory maven:
<configuration>
<outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
</configuration>
Gunakan outputDirectory jika Anda ingin properti dapat diakses oleh kode aplikasi Anda:
<configuration>
<outputFile>${project.build.outputDirectory}/my.properties</outputFile>
</configuration>
Bagi mereka yang mencari contoh yang lebih lengkap (saya perlu sedikit mengotak-atik agar ini berfungsi karena saya tidak mengerti bagaimana penamaan tag properti memengaruhi kemampuan untuk mengambilnya di tempat lain di file pom), pom saya terlihat sebagai berikut:
<dependencies>
<dependency>
...
</dependency>
</dependencies>
<properties>
<app.env>${app.env}</app.env>
<app.port>${app.port}</app.port>
<app.domain>${app.domain}</app.domain>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>write-project-properties</goal>
</goals>
<configuration>
<outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Dan di baris perintah:
mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901
Jadi properti ini dapat diakses dari kode Java:
java.io.InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.properties");
java.util.Properties properties = new Properties();
properties.load(inputStream);
appPort = properties.getProperty("app.port");
appDomain = properties.getProperty("app.domain");