如何在maven和IntelliJ之间共享三叶草覆盖数据

时间:2014-04-16 00:54:59

标签: java maven intellij-idea clover

我有一个多模块项目。我使用作为我的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并检查相对于项目目录。复选框。

但那不起作用。

注意:
它位于Configuring Instrumentation的底部 如果您有多模块项目,请不要明确设置这些位置。
所以我也尝试将该位置作为Maven和IDEA的默认位置,但这也没有用。

同样在Clover for IDEA installation GUIDE - Known Issues

  

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

为什么它们应该是不同的是否有一些文件损坏问题?如果它们保持不同,那么 HOW 可以获得强大的覆盖突出显示/ etc,而不必在完全独立的过程中重复构建吗?

2 个答案:

答案 0 :(得分:2)

好吧,我终于想出了答案。我把它留给了后人。

解决方案很复杂,有点像Hack,但 WORKS

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

    • cloverDB:<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
      Run Configuration for Unit tests screen
  3. 创建Maven运行配置
    • 使单元测试启动前条件
    • 在命令行中,Maven运行clover2:aggregrate
      Run Configuration to have Maven Run the tests and aggregate the results
  4. 更新三叶草的Intellij项目设置以指向合并文件
    • 确保选中相对于项目目录。复选框。
    • InitString 用户指定的,其值与您的pom文件相同。
      就我而言: .clover \ cloverMergeDB
      Settings Screen with CheckBox Checked and File name
  5. 运行命令后,只需单击 Referesh Coverage 图标即可查看并使用想法中的coverage数据。
    • 如果测试失败,您还可以使用漂亮的 IntelliJ测试运行器选项卡来找出原因。

答案 1 :(得分:0)

在配置工具的底部,它说 如果您有多模块项目,请不要显式设置这些位置。

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

&#34;如果您使用的是Maven构建工具,则应避免使用与Maven相同的IntelliJ输出目录。由于Maven使用目标/类和目标/测试类目录,因此请避免指定这些目录/#34; [...]为什么它们应该是不同的是存在一些文件损坏问题?

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

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

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

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