Bunu çözmek için özellikler eklentisini kullandım.
Özellikler pom'da tanımlanır ve bir my.properties dosyasına yazılır, burada daha sonra Java kodunuzdan erişilebilirler.
Benim durumumda, bu özellikler dosyasına erişmesi gereken test kodudur, bu nedenle pom'da özellikler dosyası maven'in testOutputDirectory'sine yazılır:
<configuration>
<outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
</configuration>
Özelliklerin uygulama kodunuz tarafından erişilebilir olmasını istiyorsanız outputDirectory kullanın:
<configuration>
<outputFile>${project.build.outputDirectory}/my.properties</outputFile>
</configuration>
Daha kapsamlı bir örnek arayanlar için (özellik etiketlerinin isimlendirilmesinin onları pom dosyasında başka bir yerde alma yeteneğini nasıl etkilediğini anlamadığım için bunu çalıştırmak biraz uğraşmam gerekti), pom'um aşağıdaki gibi görünüyor:
<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>
Ve komut satırında:
mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901
Dolayısıyla bu özelliklere Java kodundan erişilebilir:
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");