2013-07-03 14 views
14

Ich versuche, TestNG-Tests auszuführen. Meine Projektorganisation ist - src-> test-> java-> com> shn-> library Der folgende Befehl funktioniert gut in Windows, scheitert aber unter Linux.Klasse nicht gefunden Ausnahme mit EXEC-Maven-Plugin bei der Ausführung unter Linux

mvn -X clean exec:java -Dexec.mainClass="com.shn.library.RunSuitesInParallel" -Dexec.classpathScope=test -e 

Fehler in Linux gesehen auf den gleichen Befehl ausgeführt wird -

[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 
+2

Haben Sie laufen ' mvn install' auf Linux um das jar zu erstellen? – kfaerber

+0

Ja, ich habe versucht, mvn installieren – praneel

+0

Mein Bad, ich habe mvn installieren laufen. Aber dann wurde der Befehl von mir ausgeführt - mvn ** clean ** -X exec: java -Dexec.mainClass = "com.shn.library.RunSuitesInParallel" -Dexec.classpathScope = test -e. Also wurden alle kompilierten Klassen gelöscht und der Fehler war offensichtlich – praneel

Antwort

26

Ich lief -

mvn clean install. 

Beitrag, die, wenn ich laufen -

mvn -X clean exec:java -Dexec.mainClass="com.shn.library.RunSuitesInParallel" -Dexec.classpathScope=test -e 

Die kompilierten Klassen gelöscht werden & ist der Fehler offensichtlich.

So ist die Lösung -

mvn -X clean install exec:java -Dexec.mainClass="com.shn.library.RunSuitesInParallel" -Dexec.classpathScope=test -e 
3

Obwohl die akzeptierte Antwort in Ordnung ist, gilt dies auch jemand helfen könnte.

Es scheint Sie müssen sicherstellen, dass Sie das Maven-Projekt erstellen, bevor Sie Plugin-Ziele ausführen, die auf den kompilierten Klassen beruhen.

Wenn Sie eine neue Java-Klasse erstellen, wird das Plug-in-Ziel ClassNotFoundException mit der Zeit verworfen, da es keine kompilierte Version dieser Klasse gibt (Plugin basiert auf der kompilierten Version der Klasse).

Nehmen wir an, Sie haben eine Plugin-Konfiguration wie unten in Ihrer pom.xml () HINWEIS: Original SO Frage erwähnt es direkt die Hauptklasse ohne Angabe in einer pom.xml, und wie es zu tun ist in erklärt So ist die akzeptierte Antwort von 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> 

, bevor Sie Plugin Ziele laufen, tun

mvn clean install 

dann

mvn exec:java 

oder tun,

mvn install exec:java 
1

sehr wahrscheinlich, dass die Auflösung auf ClassNotFoundException wenn exec-Maven-Plugin verwenden, um ist change the default classpath scope (src \ main \ java), um Ihre Test Klassenpfad (src \ test \ java).

Es kann in der MVN-Befehl übergeben werden (-Dexec.classpathScope = "test") oder in der pom.xml:

<classpathScope>test</classpathScope> 

zum Beispiel:

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