Maven - argument passe à utiliser dans le plug-in exec-maven
-
26-09-2019 - |
Question
dans mon pom J'ai ajouté le plugin exec-Maven pour appeler une classe java qui va générer un fichier. Cette classe nécessite certains paramètres à passer à la méthode principale, l'un d'entre eux est l'emplacement d'un fichier d'entrée (en dehors du projet). Jusqu'à présent, je me sers un chemin relatif pour ce qui fonctionne très bien:
<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>
Maintenant, je commence à utiliser hudson installer / package et déployer les guerres et je ne peux plus utiliser ce chemin relatif. pensée simple I, je passe juste l'emplacement du fichier d'entrée lors de l'appel Maven, par exemple:
mvn package propre -Dlangdir = C: / somedir
puis modifier la pom comme:
<argument>${langdir}/PMLanguage.xls</argument>
Cependant, ce paramètre se tout simplement ignoré ici. Le chemin de la classe principale reçoit comme argument devient null / PMLanguage.xls . Le paramètre lui-même est disponible dans maven, je l'ai testé avec succès en utilisant un écho dans le plug-in antrun. Le chemin correct a été repris.
sont les paremeters que vous passez à Maven alors pas disponible par défaut, peu importe où vous les référence dans les pom?
Merci pour toute aide,
Stijn
La solution
Je ne peux pas reproduire le problème. J'ai utilisé la classe de test suivant:
package com.stackoverflow.q3421918;
public class Hello
{
public static void main( String[] args )
{
System.out.println( args[0] + " " + args[1] );
}
}
Et le pom.xml suivant:
<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>
Et voici la sortie que je reçois:
$ 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] ------------------------------------------------------------------------ ...
Testé avec Maven 2.2.1.