TestNGテストを実行しようとしています。プロジェクトの構成は-src-> test-> Java-> com-> shn-> library以下のコマンドはWindowsではうまく機能しますが、Linuxでは失敗します。
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
私が走った-
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
受け入れられた答えで結構ですが、これも誰かを助けるかもしれません。
それはコンパイルされたクラスに依存するプラグインのゴールを実行する前に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
exec-maven-pluginを使用すると、ClassNotFoundExceptionに解決される可能性が最も高い、デフォルトのクラスパススコープを変更(src\main\Java)をtest classpath(src\test\Java)。
Mvnコマンド(-Dexec.classpathScope = "test")または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>