web-dev-qa-db-fra.com

Maven Exec Plugin: Comment configurer le répertoire de travail

J'utilise le plugin Exec Maven avec la commande suivante:

mvn exec: Java

et je n'ai pas réussi à définir le répertoire de travail avec ce mode d'exécution. Je veux utiliser une mainClass (dans un package spécifique) et je veux le dossier racine de mon exécution dans un autre répertoire que $ {basedir}.

Merci de votre aide.

Mon pom.xml où la cible <workingDirectory> ne fonctionne pas pour moi:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.3.2</version>
        <configuration>
            <workingDirectory>${project.build.directory}\classes</workingDirectory>
            <mainClass>com.package.MyMainClass</mainClass>
            <includeProjectDependencies>true</includeProjectDependencies>
        </configuration>
  </plugin>

le résultat avec l'option -X

[DEBUG] Configuring mojo org.codehaus.mojo:exec-maven-plugin:1.3.2:Java from plugin realm ClassRealm[plugin>org.codehaus.mojo:exec-maven-plugin:1.3.2,parent: Sun.misc.Launcher$AppClassLoader@11b86e7]
[DEBUG] Configuring mojo 'org.codehaus.mojo:exec-maven-plugin:1.3.2:Java' with basic configurator -->
[DEBUG]   (f) arguments = []
[DEBUG]   (f) classpathScope = runtime
[DEBUG]   (f) cleanupDaemonThreads = true
[DEBUG]   (f) daemonThreadJoinTimeout = 15000
[DEBUG]   (f) includePluginDependencies = false
[DEBUG]   (f) includeProjectDependencies = true
[DEBUG]   (f) keepAlive = false
[DEBUG]   (f) killAfter = 1
[DEBUG]   (f) localRepository =        id: local url: file:///C:/Users/100728452/.m2/repository/   layout: none
[DEBUG]   (f) mainClass = com.package.MyMainClass
[DEBUG]   (f) pluginDependencies = [org.codehaus.mojo:exec-maven-plugin:maven-plugin:1.3.2:, org.codehaus.plexus:plexus...
[DEBUG]   (f) skip = false
[DEBUG]   (f) stopUnresponsiveDaemonThreads = false
[DEBUG]   (s) key = Sun.Java2d.ddoffscreen
[DEBUG]   (s) value = false
[DEBUG]   (s) key = com.odi.OStoreLicenseFile
[DEBUG]   (s) value = .\library\odi\etc\license.txt
[DEBUG]   (f) systemProperties = [org.codehaus.mojo.exec.Property@194e776, org.codehaus.mojo.exec.Property@e80740]
[DEBUG] -- end configuration --
[WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment on MEXEC-6.
[DEBUG] Invoking : com.mypackage.MyMainClass.main()
[DEBUG] Plugin Dependencies will be excluded.
[DEBUG] Project Dependencies will be included.
[DEBUG] Collected project artifacts [javax.help:javahelp:jar:2.0.02:compile,
14
user1842947

Je n'ai pas trouvé de solution avec exec: Java.

Donc, maintenant j'utilise exec: exec à la place parce que nous pouvons définir le répertoire de travail et c'est OK.

<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
    <execution>
        <goals>
            <goal>exec</goal>
        </goals>
    </execution>
</executions>
<configuration> 
    <executable>Java</executable>
    <arguments>
        <argument>-classpath</argument> 
        <classpath />
        <argument>com.package.MyMainClass</argument>  
    </arguments>
    <workingDirectory>${project.build.outputDirectory}</workingDirectory>           
</configuration>
23
user1842947

Je n'ai pas non plus pu trouver de correctif, mais une solution de contournement laide qui était applicable dans mon cas est de simplement passer ${project.build.directory} (ou n'importe quelle propriété maven en l'occurrence) comme argument de la classe principale et la manipulant à partir de là.

<configuration>
    [...]
    <arguments>
        <argument>${project.build.directory}</argument>
    </arguments>
    [...]
</configuration>

Définir le répertoire de travail actuel dans le code pour simuler correctement la configuration workingDirectory qui ne fonctionne pas est un peu délicat si vous insistez, vérifiez la réponse liée this pour plus d'informations.

3
Hesham

Si vous souhaitez le configurer en appelant mvn exec:Java ... vous devez passer par la propriété comme ceci:

mvn exec:Java -Dexec.workingdir=Folder ...

qui n'a rien à voir avec ce que vous avez défini dans votre cause pom en appelant le but exec:Java ne fait pas partie du cycle de vie.

1
khmarbaise