2010-08-06 15 views
5

en mi pom He agregado el exec-maven-plugin para llamar a una clase java que generará un archivo. Esta clase requiere que algunos parámetros pasen al método principal, uno de ellos es la ubicación de un archivo de entrada (fuera del proyecto). Hasta ahora he estado utilizando una ruta relativa para este que funciona muy bien:Maven - pasar argumento para usar en exec-maven-plugin

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>test</phase> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>com.laco.projectmaster.util.LanguageGenerator</mainClass> 
       <arguments> 
        <argument>../PM-Config/dev/PMLanguage.xls</argument> 
        <argument>PM4.0</argument> 
        <argument>${project.build.outputDirectory}/com/laco/projectmaster/props/resources</argument> 
        <argument>ProjectMaster</argument> 
        <argument>Created during maven build (POM Version: ${pom.version})</argument> 
       </arguments> 
      </configuration> 
     </plugin> 

Ahora estoy empezando a utilizar para instalar Hudson/paquete y desplegar las guerras y no puedo ya utilizar esta ruta relativa. Sencilla pensé, sólo tiene que pasar la ubicación del archivo de entrada cuando se invoca como experta:

mvn paquete limpio -Dlangdir = C:/somedir

y luego alterar el POM como:

<argument>${langdir}/PMLanguage.xls</argument> 

Sin embargo, este parámetro simplemente se ignora aquí. La ruta que recibe la clase principal como argumento se convierte en null/PMLanguage.xls. El parámetro en sí está disponible en maven, probé con éxito utilizando un eco en el plugin antrun. La ruta correcta fue repetida.

¿Los parámetros que pasa a maven no están disponibles por defecto, sin importar dónde los referencia en el pom?

gracias por cualquier ayuda,
Stijn

Respuesta

13

No puedo reproducir el problema. He utilizado la siguiente clase de prueba:

package com.stackoverflow.q3421918; 

public class Hello 
{ 
    public static void main(String[] args) 
    { 
     System.out.println(args[0] + " " + args[1]); 
    } 
} 

y la siguiente pom.xml:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow.q3421918</groupId> 
    <artifactId>Q3421918</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <!-- this was a test for a workaround --> 
    <properties> 
    <myprop>${langdir}</myprop> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.2</version> 
     <executions> 
      <execution> 
      <phase>test</phase> 
      <goals> 
       <goal>java</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <mainClass>com.stackoverflow.q3421918.Hello</mainClass> 
      <arguments> 
      <argument>${myprop}</argument> 
      <argument>${langdir}</argument> 
      </arguments> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Y aquí está la salida me sale:

 
$ mvn clean package -Dlangdir=C:/somedir 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3421918 
[INFO] task-segment: [clean, package] 
[INFO] ------------------------------------------------------------------------ 
... 
[INFO] Preparing exec:java 
[WARNING] Removing: java from forked lifecycle, to prevent recursive invocation. 
[INFO] No goals needed for project - skipping 
[INFO] [exec:java {execution: default}] 
Hello c:/somedir c:/somedir 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
... 

probado con Maven 2.2.1.

+1

Pascal, lo siento mucho pero parece que desperdicié tu precioso tiempo. No puedo explicarlo pero cuando vuelvo a ejecutar el empaque ahora funciona bien. No cambié nada mientras tanto, así que no entiendo por qué no funcionó ayer. Entonces, lo siento pero gracias. –

Cuestiones relacionadas