Ho usato il plugin delle proprietà per risolvere questo problema.
Le proprietà vengono definite nel pom e scritte in un file my.properties, da cui è possibile accedervi dal codice Java.
Nel mio caso è il codice di test che deve accedere a questo file delle proprietà, quindi nel pom il file delle proprietà viene scritto nella testOutputDirectory di Maven:
<configuration>
<outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
</configuration>
Usa outputDirectory se vuoi che le proprietà siano accessibili dal codice della tua app:
<configuration>
<outputFile>${project.build.outputDirectory}/my.properties</outputFile>
</configuration>
Per coloro che cercano un esempio più completo (mi ci è voluto un po 'di tempo per farlo funzionare perché non capivo come la denominazione dei tag delle proprietà influisca sulla capacità di recuperarli altrove nel file pom), il mio pom appare come segue:
<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>
E sulla riga di comando:
mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901
Quindi è possibile accedere a queste proprietà dal codice 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");