Maven - passa argumento para usar em exec-maven-plugin
-
26-09-2019 - |
Pergunta
no meu pom adicionei o exec-maven-plugin para chamar uma classe java que irá gerar um arquivo.Esta classe requer que alguns parâmetros sejam passados para o método principal, um deles é a localização de um arquivo de entrada (fora do projeto).Até agora tenho usado um caminho relativo para isso que funciona bem:
<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>
Agora estou começando a usar o Hudson para instalar/empacotar e implantar o wars e não posso mais usar esse caminho relativo.Simples, pensei, apenas passo a localização do arquivo de entrada ao invocar o maven como:
pacote limpo mvn -Dlangdir=C:/somedir
e então altere o pom como:
<argument>${langdir}/PMLanguage.xls</argument>
No entanto, este parâmetro simplesmente é ignorado aqui.O caminho que a classe principal recebe como argumento torna-se nulo/PMLanguage.xls .O parâmetro em si está disponível no maven, testei com sucesso usando um echo no plugin antrun.O caminho correto foi repetido.
Os parâmetros que você passa para o maven não estão disponíveis por padrão, não importa onde você os referencie no pom?
Obrigado por qualquer ajuda,
Stijn
Solução
Não consigo reproduzir o problema.Usei a seguinte classe de teste:
package com.stackoverflow.q3421918;
public class Hello
{
public static void main( String[] args )
{
System.out.println( args[0] + " " + args[1] );
}
}
E o seguinte 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>
E aqui está a saída que recebo:
$ 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] ------------------------------------------------------------------------ ...
Testado com Maven 2.2.1.