J'essaie d'exécuter des tests TestNG. L'organisation de mon projet est - src-> test-> Java-> com-> shn-> bibliothèque La commande ci-dessous fonctionne bien sous Windows mais échoue sous Linux.
mvn -X clean exec:Java -Dexec.mainClass="com.shn.library.RunSuitesInParallel" -Dexec.classpathScope=test -e
Erreur vue sous Linux lors de l'exécution de la même commande -
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:Java (default-cli) on project UAF: An exception occured while executing the Java class. com.shn.library.RunSuitesInParallel -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:Java (default-cli) on project UAF: An exception occured while executing the Java class. com.shn.library.RunSuitesInParallel
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:217)
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:153)
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:145)
at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:84)
at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:59)
at org.Apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.Java:183)
at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:161)
at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:320)
at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:156)
at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:537)
at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:196)
at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:141)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:352)
Caused by: org.Apache.maven.plugin.MojoExecutionException: An exception occured while executing the Java class. com.shn.library.RunSuitesInParallel
at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.Java:352)
at org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.Java:101)
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:209)
... 19 more
Caused by: Java.lang.ClassNotFoundException: com.shn.library.RunSuitesInParallel
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:366)
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:423)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:356)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.Java:285)
at Java.lang.Thread.run(Thread.Java:722)
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/MojoExecutionException
L'Iran -
mvn clean install.
Post qui quand je cours -
mvn -X clean exec:Java -Dexec.mainClass="com.shn.library.RunSuitesInParallel" -Dexec.classpathScope=test -e
Les classes compilées sont supprimées et l'erreur est apparente.
La solution est donc -
mvn -X clean install exec:Java -Dexec.mainClass="com.shn.library.RunSuitesInParallel" -Dexec.classpathScope=test -e
Bien que la réponse acceptée soit correcte, cela pourrait aussi aider quelqu'un.
Il semble que vous devez vous assurer que vous construisez le projet Maven avant d'exécuter les objectifs du plugin qui dépendent des classes compilées.
Dans le cas où vous créez une nouvelle classe Java, au moment où vous allez utiliser l'objectif du plugin, ClassNotFoundException
est levé car il n'y a pas de version compilée de cette classe (le plugin dépend sur la version compilée de la classe).
Supposez simplement que vous avez une configuration de plugin comme ci-dessous dans votre pom.xml ( REMARQUE: original SO question, il mentionne l'exécution directe de la classe principale sans la spécifier dans un pom.xml, et comment le faire est expliqué dans la réponse acceptée par praneel),
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>com.myproj.Java.Main</mainClass>
</configuration>
</plugin>
Donc, avant d'exécuter des objectifs de plugin, faites
mvn clean install
puis
mvn exec:Java
ou faire,
mvn install exec:Java
Très probablement que la résolution de ClassNotFoundException lors de l'utilisation de exec-maven-plugin , est de changer la portée du chemin de classe par défaut (src\main\Java), à votre test classpath (src\test\Java).
Il peut être passé dans la commande mvn (-Dexec.classpathScope = "test"), ou dans le pom.xml:
<classpathScope>test</classpathScope>
par exemple:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<phase>test-compile</phase>
<goals>
<goal>Java</goal>
</goals>
<configuration>
<mainClass>your.package.test.class</mainClass>
<arguments>
...
</arguments>
<classpathScope>test</classpathScope>
</configuration>
</execution>
</executions>
</plugin>