wwe tutorial maven

tutorial - Pasar argumentos de línea de comando de Maven como propiedades en pom.xml



maven tutorial (4)

Dentro de pom.xml

<project>

.....

<profiles> <profile> <id>linux64</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <build_os>linux</build_os> <build_ws>gtk</build_ws> <build_arch>x86_64</build_arch> </properties> </profile> <profile> <id>win64</id> <activation> <property> <name>env</name> <value>win64</value> </property> </activation> <properties> <build_os>win32</build_os> <build_ws>win32</build_ws> <build_arch>x86_64</build_arch> </properties> </profile> </profiles>

.....

<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>target-platform-configuration</artifactId> <version>${tycho.version}</version> <configuration> <environments> <environment> <os>${build_os}</os> <ws>${build_ws}</ws> <arch>${build_arch}</arch> </environment> </environments> </configuration> </plugin>

.....

En este ejemplo, cuando ejecuta el mvn clean install pom sin ningún argumento mvn clean install se ejecutará el perfil predeterminado de mvn clean install .

Cuando se ejecuta con mvn -Denv=win64 clean install

El perfil win64 se ejecutará.

Consulte http://maven.apache.org/guides/introduction/introduction-to-profiles.html

¿Es posible pasar argumentos de la línea de comando a las propiedades en el archivo pom.xml ? por ejemplo, corro mvn ... argument

y en pom.xml

<properties> <myproperty> here should add argument from command line</myproperty> </properties>

Gracias por la ayuda.


Para su ejemplo de propiedad, haga lo siguiente:

mvn install "-Dmyproperty=my property from command line"

Observe las citas en torno a la definición de propiedad completa. Los necesitará si su propiedad contiene espacios.


Puede dar nombres de variables como archivos de proyecto. Por ejemplo, en su configuración de complemento, proporcione solo una etiqueta como la siguiente:

<projectFile>${projectName}</projectFile>

Luego, en la línea de comando, puede pasar el nombre del proyecto como parámetro: -

mvn [your-command] -DprojectName=[name of project]


Usé el plugin de propiedades para resolver esto.

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 el que necesita acceder a este archivo de propiedades, así que en el pom, el archivo de propiedades se escribe en el testOutputDirectory de maven:

<configuration> <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> </configuration>

Use outputDirectory si desea que el código de su aplicación pueda acceder a las propiedades:

<configuration> <outputFile>${project.build.outputDirectory}/my.properties</outputFile> </configuration>

Para aquellos que buscan un ejemplo más completo (me tomó un poco de toquetear para que esto funcionara, ya que no entendía cómo el nombre de las etiquetas de propiedades afecta la capacidad de recuperarlas en otro lugar del archivo pom), mi pom se ve así:

<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 comando:

mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901

Por lo tanto, se puede acceder a estas propiedades desde el código de 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");