【问题标题】:Maven Failsafe plugin cannot find classMaven Failsafe 插件找不到类
【发布时间】:2018-02-06 14:36:12
【问题描述】:

我正在处理的项目有几个模块,其中一个模块是integration_test,对所有其他模块进行集成测试。这对我来说是一个奇怪的架构,我不确定我是否正确处理了这种情况。

我们还没有持续集成,现在我们正在从 Eclipse 运行套件测试,但我们想从持续集成服务器运行它。我一直在努力更新我们的 POM 以从命令行执行它。我将在下面包含一个示例项目,因为在这里粘贴我认为还不够的类。

我遵循了 Maven Failsafe 插件文档,但是当我执行 mvn clean verify -P integration-test 时,我得到了 Cannot find class in classpath: TestApiMain

我认为这是因为试图在编译之前运行该类,但我不知道在所有其他模块实际编译后如何运行集成测试。我还想实现 Jacoco 以进行测试覆盖。阅读以下实施 Jacoco 的指南,我想我已经接近了:

https://www.petrikainulainen.net/programming/maven/creating-code-coverage-reports-for-unit-and-integration-tests-with-the-jacoco-maven-plugin/

执行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)

示例项目:https://drive.google.com/file/d/1Ow--OYz4LzxNZvoBPtb5Ub2khXSR74w3/view?usp=sharing

【问题讨论】:

    标签: maven integration-testing maven-failsafe-plugin


    【解决方案1】:

    您在 build/plugins 部分的父 pom 中定义了插件 failsafe。这意味着在阶段integration-test 中的每个模块,包括父模块,都必须调用failsafe(TestApiMain.class)

    它不起作用,因为TestApiMain 是在最后一个模块integration_test 中定义的

    您应该将failsafe 定义移动到integration_test/pom.xmlbuild/plugins 部分

    【讨论】:

    • 见鬼,太明显了。但是现在忽略了我的 suiteXmlFile 并且测试以这种方式失败。
    • 我需要执行该文件,测试在设置环境的框架中,并且独立似乎无法正常工作......但这是另一个问题......
    • 实际上它不起作用,我尝试了示例项目,我得到了同样的错误Cannot find class in classpath: TestApiMain
    • @FranAguiar,哪个模块失败了?我下载了你的示例项目,修改后通过了集成测试
    • 是的,我的错,它有效。我正在尝试使用不同的示例...如果适用于示例项目,它应该适用于真实的项目。现在我知道发生了什么,它正在执行独立测试和套件文件。我只有什么套房
    【解决方案2】:

    对于阅读此内容且项目配置正确但仍找不到类的任何人,请查看以下内容是否适用。

    升级到 3.0.0-M5 时,此插件可能无法从传递依赖项中找到类。除了回滚到 3.0.0-M4 之外,一个简单的修复方法是将 classesDirectory 添加到您的插件配置中

    <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <configuration>
                        <classesDirectory>${project.build.outputDirectory}</classesDirectory>
                    </configuration>
                </plugin>
            </plugins>
    </pluginManagement>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2012-07-17
      • 2017-10-28
      • 2019-01-17
      • 2015-05-13
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多