Maven Failsafe 插件找不到 class
Maven Failsafe plugin cannot find class
我正在处理的项目有几个模块,其中一个模块是 integration_test
,对所有其他模块进行集成测试。这对我来说是一个奇怪的架构,我不确定我是否正确处理了这种情况。
我们还没有持续集成,现在我们正在 运行 从 Eclipse 进行套件测试,但我们想 运行 从持续集成服务器进行测试。我一直致力于更新我们的 POM 以从命令行执行它。我将在下面包含一个示例项目,因为在此处粘贴我认为不够的 classes。
我遵循了 Maven Failsafe 插件文档,但是当我执行 mvn clean verify -P integration-test
时,我得到 Cannot find class in classpath: TestApiMain
我认为这是因为在编译之前试图 运行 宁 class 但我不知道如何 运行 在所有其他模块实际上是之后的集成测试编译。我还想实施 Jacoco 来进行测试覆盖。阅读以下实施 Jacoco 的指南我想我已经接近了:
执行时出现异常 mvn clean verify -P integration-test
:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20.1:verify (integration-test) on project root: There are test failures.
[ERROR]
[ERROR] Please refer to /home/francisco_aguiar/repos/sample_project/target/failsafe-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
[ERROR]
[ERROR] Cannot find class in classpath: TestApiMain
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:673)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:535)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:280)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1124)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:954)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:832)
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
[ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Sample_project: https://drive.google.com/file/d/1Ow--OYz4LzxNZvoBPtb5Ub2khXSR74w3/view?usp=sharing
您在 build/plugins
部分的父 pom 中定义了插件 failsafe
。这意味着阶段 integration-test
中的每个模块(包括父模块)都必须调用 failsafe(TestApiMain.class)
.
它不会起作用,因为 TestApiMain
在最后一个模块 integration_test
中定义
您应该将 failsafe
定义移至 integration_test/pom.xml
部分 build/plugins
对于任何阅读本文但项目配置正确但仍未找到 类 的人,请查看以下内容是否适用。
升级到 3.0.0-M5 时,此插件可能无法从传递依赖项中找到 类。一个简单的修复而不是回滚到 3.0.0-M4 是添加 类Directory 到你的插件配置
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
</configuration>
</plugin>
</plugins>
</pluginManagement>
我正在处理的项目有几个模块,其中一个模块是 integration_test
,对所有其他模块进行集成测试。这对我来说是一个奇怪的架构,我不确定我是否正确处理了这种情况。
我们还没有持续集成,现在我们正在 运行 从 Eclipse 进行套件测试,但我们想 运行 从持续集成服务器进行测试。我一直致力于更新我们的 POM 以从命令行执行它。我将在下面包含一个示例项目,因为在此处粘贴我认为不够的 classes。
我遵循了 Maven Failsafe 插件文档,但是当我执行 mvn clean verify -P integration-test
时,我得到 Cannot find class in classpath: TestApiMain
我认为这是因为在编译之前试图 运行 宁 class 但我不知道如何 运行 在所有其他模块实际上是之后的集成测试编译。我还想实施 Jacoco 来进行测试覆盖。阅读以下实施 Jacoco 的指南我想我已经接近了:
执行时出现异常 mvn clean verify -P integration-test
:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20.1:verify (integration-test) on project root: There are test failures.
[ERROR]
[ERROR] Please refer to /home/francisco_aguiar/repos/sample_project/target/failsafe-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
[ERROR]
[ERROR] Cannot find class in classpath: TestApiMain
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:673)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:535)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:280)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1124)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:954)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:832)
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
[ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Sample_project: https://drive.google.com/file/d/1Ow--OYz4LzxNZvoBPtb5Ub2khXSR74w3/view?usp=sharing
您在 build/plugins
部分的父 pom 中定义了插件 failsafe
。这意味着阶段 integration-test
中的每个模块(包括父模块)都必须调用 failsafe(TestApiMain.class)
.
它不会起作用,因为 TestApiMain
在最后一个模块 integration_test
您应该将 failsafe
定义移至 integration_test/pom.xml
部分 build/plugins
对于任何阅读本文但项目配置正确但仍未找到 类 的人,请查看以下内容是否适用。
升级到 3.0.0-M5 时,此插件可能无法从传递依赖项中找到 类。一个简单的修复而不是回滚到 3.0.0-M4 是添加 类Directory 到你的插件配置
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
</configuration>
</plugin>
</plugins>
</pluginManagement>