【问题标题】:JaCoCo: missing classes directoryJaCoCo:缺少类目录
【发布时间】:2015-05-18 11:08:34
【问题描述】:

我是 JaCoCo 的新手,无法生成代码覆盖率报告。

这是我的项目结构:

我的集成测试位于“...-integration-tests”模块中。当我使用 mvn 构建我的项目时,我在日志中得到以下信息:

[INFO] Skipping JaCoCo execution due to missing classes directory: ...-integration-tests\target\classes

这是真的,因为我编译的代码只在相应模块的target>类中可用。

实现此功能的最佳方法是什么?提前致谢!

【问题讨论】:

  • 首先,当您运行 IT 集成测试时,您必须在 Tomcat 或类似 JVM 后面运行项目应用程序的 .war。您必须附加 jacocoagent.jar 并为您的目标 JVM(Tomcat)的启动脚本提供 destfile=jacocoIT.exe 或某些名称,或者将选项传递给它。然后,它将获取类文件。现在,它将您的 IT 测试模块视为一个项目,并且那里没有类。您在哪里生成 IT 测试源代码的类文件?

标签: java maven integration-testing code-coverage jacoco


【解决方案1】:

这是因为 JaCoCo “report” mojo 试图在“默认” maven 项目布局中查找源和类:

@Override
boolean canGenerateReportRegardingClassesDirectory() {
    return new File(getProject().getBuild().getOutputDirectory()).exists();
}

拥有与您类似的布局,我能够通过显式设置 build.sourceDirectorybuild.outputDirectory 指向您测试模块的内部来绕过 JaCoCo 配置限制。在该 maven 尝试第二次编译它之后,我还必须覆盖默认编译执行,我的 Tests 模块 pom.xml 的重要(和可共享)部分现在看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<project ...
...
    <parent>
...
    </parent>

    <dependencies>
...
    </dependencies>

    <properties>
...
    </properties>

    <build>
        <sourceDirectory>../../Source</sourceDirectory> <!-- tested sources root, in proper layout: src/main/java -->
        <outputDirectory>../bin</outputDirectory> <!-- tested classes root, in proper layout: target/classes -->

        <testSourceDirectory>${project.basedir}/../../Test/java</testSourceDirectory> <!-- if tests code also taken from outside -->

        <testResources>
            ...
        </testResources>

        <plugins>
...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <executions>
                    <!-- disabling default-compile -->
                    <execution>
                        <id>default-compile</id>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <phase>compile</phase>
                        <configuration>
                            <source>1.7</source>
                            <target>1.7</target>
                            <includes/>
                            <excludes>
                                <exclude>**/*.java</exclude>
                            </excludes>
                        </configuration>
                    </execution>
...
                </executions>
            </plugin>

            <!-- typical jacoco usage -->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit4</artifactId>
                        <version>2.10</version>
                    </dependency>
                </dependencies>
                <configuration>
...
                    <argLine>${argLine} -XX:PermSize=512M -XX:MaxPermSize=512M -Xmx1024M</argLine>
...
                    <forkCount>1</forkCount>
                    <reuseForks>true</reuseForks>
                </configuration>
                <executions>
...
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2019-02-06
    • 2016-09-08
    相关资源
    最近更新 更多