que utiliza las propiedades del plugin para resolver este .
Las propiedades se definen en el pom y se escriben en un archivo my.properties, donde se puede acceder a ellas desde su código Java.
En mi caso es el código de prueba que se necesita para acceder a este archivo de propiedades, por lo que en el pom el archivo de propiedades se escribe en testOutputDirectory del experto:
<configuration>
<outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
</configuration>
Uso OutputDirectory si desea que las propiedades sean accesibles por su código de aplicación:
<configuration>
<outputFile>${project.build.outputDirectory}/my.properties</outputFile>
</configuration>
para aquellos que buscan un ejemplo más completo (me tomó un poco de tocar el violín a conseguir este trabajo, ya que no entiendo como nombres de las propiedades de las etiquetas afecta a la capacidad de recuperarlos otra parte del archivo POM), mi pom se ve como f ollows:
<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>
Y en la línea de comandos:
mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901
Así que estas propiedades se pueden acceder desde el código 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");
No directamente lo que estás pidiendo, pero [experto perfiles] (http://maven.apache.org/guides/introduction/introduction-to-profiles.html) puede ser útil para este – Sig
Sí, sé sobre perfiles. Estoy usando maven-soapui-plugin donde en ... projectFile> se define el nombre del proyecto. Tengo aproximadamente 10 proyectos y no quiero para cada nuevo perfil del proyecto. Quiero usar el argumento para ejecutar mvn ... project1 para ejecutar project1 y mvn ... project2 para ejecutar project2 –
hudi