web-dev-qa-db-ja.com

Linuxで実行すると、exec-maven-pluginでClass Not Found例外が発生する

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

私が走った-

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

受け入れられた答えで結構ですが、これも誰かを助けるかもしれません。

それはコンパイルされたクラスに依存するプラグインのゴールを実行する前に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
11
prime

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