2

我有一个多模块项目。我使用作为我的 IDE。我已经为 Maven 配置了插件以在构建时自动检测。如何让 IntelliJ 识别这些更改并刷新其覆盖数据。(注意:必须单击“刷新覆盖”工具栏按钮。)

我试过像这样配置maven-clover2-plugin

  <plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-clover2-plugin</artifactId>
    <version>3.2.2</version>
    <configuration>
      <baseDir>${project.basedir}</baseDir>
      <cloverMergeDatabase>
        ${project.basedir}.clover\cloverMerge.db
      </cloverMergeDatabase>
    </configuration>
    <executions>
      <execution>
        <id>main</id>
        <phase>package</phase>
        <goals>
          <goal>instrument</goal>
          <goal>aggregate</goal>
          <goal>check</goal>
        </goals>
      </execution>
      <execution>
        <id>site</id>
        <phase>pre-site</phase>
        <goals>
          <goal>instrument</goal>
          <goal>aggregate</goal>
          <goal>check</goal>
        </goals>
      </execution>
      <execution>
        <id>clean</id>
        <phase>clean</phase>
        <goals><goal>clean</goal></goals>
      </execution>
    </executions>
  </plugin>

然后我将我的项目设置配置为使用:
.clover\cloverMerge.db并检查相对于项目目录的目录。复选框。

但这没有用。

注意:
配置检测的底部,如果您有一个多模块项目,
请不要明确设置这些位置。
因此,我还尝试将该位置保留为 Maven 和 IDEA 的默认位置,但这也不起作用。

也在Clover for IDEA 安装指南 - 已知问题

如果您使用的是 Maven 构建工具,则应避免使用与 Maven 相同的 > IntelliJ 输出目录。由于 Maven 使用 target/classestarget/test-classes目录,请
避免指定这些目录。IntelliJ的clover.db位置也应该不同于 Maven 使用的位置。

为什么要区分它们是否存在一些文件损坏问题?如果它们保持不同,那么我如何才能获得出色的覆盖突出显示/等,而不必在完全独立的过程中重复构建?

4

2 回答 2

2

好吧,我终于想出了一个答案。我把这个留给后代。

解决方案很复杂,有点像黑客,但它可以工作

  1. 更新父项目pom.xml文件

    • 三叶草数据库: <cloverDatabase>${project.basedir}.clover\clover.db</cloverDatabase>
    • 合并 CloverDB:
      <cloverMergeDatabase> ${project.basedir}.clover\cloverMerge.db </cloverMergeDatabase>
  2. 创建要在IntelliJ IDEA中运行的单元测试

    • 启动前设置-运行 Maven 目标
      clean clover2:setup prepare-package -DSkipTests
      运行单元测试配置屏幕
  3. 创建 Maven 运行配置
    • 使单元测试成为启动前条件
    • 在命令行中运行 Mavenclover2:aggregrate
      运行配置让 Maven 运行测试并汇总结果
  4. 更新三叶草的 Intellij 项目设置以指向合并文件
    • 确保相对于项目目录。复选框被选中。
    • InitString to User 指定的值与您的 pom 文件相同。
      就我而言: .clover\cloverMergeDB
      选中复选框和文件名的设置屏幕
  5. 运行该命令后,只需单击Refresh Coverage图标即可查看并使用idea 中的覆盖率数据。
    • 如果测试失败,您还可以使用漂亮的IntelliJ 测试运行器选项卡来找出原因。
于 2015-03-05T01:42:01.690 回答
0

在配置检测的底部,如果您有一个多模块项目,请不要明确设置这些位置。

文档实际上说:如果您有一个多模块项目,请不要明确设置这些位置(使用绝对路径) 。原因很简单 - 如果您使用绝对路径,那么您将不会为每个模块拥有一个单独的 clover.db,而只有一个 clover.db 文件。

“如果您使用 Maven 构建工具,您应该避免使用与 Maven 相同的 IntelliJ 输出目录。由于 Maven 使用 target/classes 和 target/test-classes 目录,请避免指定这些目录” [...] 为什么应该他们很明显是否存在一些文件损坏问题?

问题如下: IntelliJ IDEA 使用它自己的引擎来编译源代码。这意味着它不必调用原始项目的构建系统(例如 Maven)来编译源代码。

这意味着: - 如果您有一个基于 Maven 的项目并且它安装了 Clover-for-Maven 插件,并且 - 同时您在 IntelliJ IDE 中安装了 Clover-for-IDEA - 这两个 Clover 集成使用类和数据库的相同输出文件夹

...那么这两个 Clover 集成可能会开始覆盖他们的文件。

在大多数情况下,这不是期望的行为,因为 IDEA 中的任何源代码修改/项目重建操作等都会触发源重新编译;可以删除 Clover-for-Maven 之前获得的结果。

于 2015-03-07T21:05:21.980 回答