2013-07-03 39 views
14

我正在嘗試運行TestNG測試。我的項目組織是 - src-> test-> java-> com-> shn-> library 以下命令在Windows中運行良好,但在Linux中失敗。在Linux上運行時發現類未找到exec-maven-plugin異常

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

上運行相同的命令在Linux能看到錯誤 -

[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

你有運行' mvn install在Linux上創建jar? – kfaerber

+0

是的,我沒有嘗試mvn安裝 – praneel

+0

我的壞,我沒有運行mvn安裝。但後來,我運行的命令是 - mvn ** clean ** -X exec:java -Dexec.mainClass =「com.shn.library.RunSuitesInParallel」-Dexec.classpathScope = test -e。所以所有編譯的類都被刪除了,因此錯誤很明顯 – praneel

回答

26

我跑 -

mvn clean install. 

後,當我運行 -

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

編譯的類刪除&錯誤很明顯。

因此,解決辦法是 -

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

雖然接受的答案是好的,這也可以幫助別人。

看起來您需要確保在構建Maven項目之前運行任何依賴編譯類的插件目標

當你創建一個新的java類的時候,當你打算使用插件目標時,ClassNotFoundException被拋出,因爲沒有該類的編譯版本(插件依賴於類的編譯版本)。

假設你在你的pom.xml中有一個像下面這樣的插件配置()注意:原始的SO問題提到了直接運行主類而沒有在pom.xml中指定它,以及如何去做接受的答案被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> 

所以你運行任何插件的目標之前, 做

mvn clean install 

然後

mvn exec:java 

或做,

mvn install exec:java 
1

最有可能的是分辨率爲ClassNotFoundException的使用EXEC - Maven的插件時,是change the default classpath scope(SRC \主\ JAVA),您測試類路徑(src \ test \ java)。

它可以在mvn命令被傳遞(-Dexec.classpathScope = 「測試」),或在pom.xml:

<classpathScope>test</classpathScope> 

例如:

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