2011-09-22 49 views
64

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

y en pom.xml

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

Gracias por la ayuda.

+0

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

+0

Sí, sé sobre perfiles. Estoy usando maven-soapui-plugin donde en ... 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

Respuesta

83

Para su ejemplo propiedad, no:

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

Nota comillas alrededor de toda definición de la propiedad. Los necesitará si su propiedad contiene espacios.

+10

Tenga en cuenta también que, si tiene tanto una propiedad en el pom como en la línea de comando, la línea de comandos toma precedencia. Esto puede ser útil para proporcionar valores predeterminados anulables. –

11

Dentro 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 pom sin ningún argumento mvn clean install perfil predeterminado se ejecutará.

Cuando se ejecuta con mvn -Denv=win64 clean install

perfil Win64 será ejecutado.

favor refiérase http://maven.apache.org/guides/introduction/introduction-to-profiles.html

2

le puede dar los nombres de variables como archivos de proyecto. Por ejemplo, en que la configuración del complemento dar sólo una etiqueta de la siguiente manera: -

<projectFile>${projectName}</projectFile> 

A continuación, en la línea de comandos que puede pasar el nombre del proyecto como parámetro: -

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

Quiero proporcionar el nombre y el entorno del navegador en el comando mvn. Si no lo proporciono, elegirá el valor predeterminado. ¿Como hacer eso? – paul

5

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"); 
Cuestiones relacionadas