Maven - argomento passaggio da utilizzare in exec-Maven-plugin
-
26-09-2019 - |
Domanda
nel mio pom Ho aggiunto l'exec-Maven-plugin per chiamare una classe Java che genererà un file. Questa classe richiede alcuni parametri da passare al metodo principale, uno di questi è la posizione di un file di input (di fuori del progetto). Fino ad ora ho usato un percorso relativo per questo che funziona bene:
<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>
Ora sto iniziando a utilizzare Hudson per l'installazione / package e distribuire le guerre e non posso usare più questo percorso relativo. I semplice pensiero, mi basta passare il percorso del file di input quando si richiama Maven come:
pacchetto pulito mvn -Dlangdir = C: / somedir
e quindi altera il pom come:
<argument>${langdir}/PMLanguage.xls</argument>
Tuttavia, questo parametro viene ignorato semplicemente qui. Il percorso della classe principale riceve come argomento diventa null / PMLanguage.xls . Il parametro stesso è disponibile in maven, ho provato con successo utilizzando un'eco nella antrun plugin. Il percorso corretto è stato ripreso.
sono i paremeters si passa a Maven quindi non disponibile per impostazione predefinita, non importa dove li si fa riferimento nel pom?
Grazie per qualsiasi aiuto,
Stijn
Soluzione
Non riesco a riprodurre il problema. Ho usato la seguente classe di test:
package com.stackoverflow.q3421918;
public class Hello
{
public static void main( String[] args )
{
System.out.println( args[0] + " " + args[1] );
}
}
E il seguente 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>
Ed ecco l'output ottengo:
$ 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] ------------------------------------------------------------------------ ...
Testato con Maven 2.2.1.