web-dev-qa-db-fra.com

Exception Class Not Found avec exec-maven-plugin lors de son exécution sur Linux

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
24
praneel

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
39
praneel

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
11
prime

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>
10
Noam Manos