【问题标题】:Cobertura doesn't work with Java 7Cobertura 不适用于 Java 7
【发布时间】:2013-06-12 14:12:45
【问题描述】:

我正在使用 maven 3.0.4,JRE 1.7.0_09。 当我使用mvn clean install 时,我所有的测试都通过并且一切看起来都很好 - 这是我的万无一失的插件配置:

<plugin>
    <version>2.12.4</version>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <!-- -XX:-UseSplitVerifier is for java 7 -->
        <argLine>-XX:-UseSplitVerifier</argLine>
    </configuration>
</plugin> 

现在,当我mvn cobertura:cobertura 我的一些测试出现这样的错误时:

Expecting a stackmap frame at branch target .... 还有一些错误让我明白它没有使用 JRE7 运行(例如,Encountered " "|" "| "" at line...

这是我的 cobertura 插件配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
       <formats>
          <format>html</format>
          <format>xml</format>
       </formats>
       </configuration>
  </plugin>

报告是:

<reporting>
    <plugins>
        <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>cobertura-maven-plugin</artifactId>
           <version>2.5.1</version>
           <configuration>
               <formats>
                   <format>html</format>
                   <format>xml</format>
               </formats>
            </configuration>
        </plugin>
    </plugins>
</reporting>

我看到很多threads 都在谈论这个问题,解决方案是添加这一行&lt;argLine&gt;-XX:-UseSplitVerifier&lt;/argLine&gt;,但它没有帮助。

我在这里做错了什么?

【问题讨论】:

  • 如果您不使用 cobertura,我建议您使用 JaCoCo,它具有完整的 java 7 支持并且正在积极维护中。 Cobertura 似乎已经死了。
  • 谢谢,我正在尝试,我收到了一个新的question
  • 拆分验证器对我有用..
  • @MichelJung - 嗯,我尝试了 jacoco,但覆盖率急剧下降 - 在一个项目上,从 97.4% 下降到 81.1%。这是典型的吗?
  • JaCoCo 不适用于 PowerMock 字节码检测。也就是说,您使用 PowerMock @PrepareForTest 的任何类都不会计入 JaCoCo 的代码覆盖率中。 (github.com/jacoco/eclemma/issues/15)

标签: java maven jenkins java-7 cobertura


【解决方案1】:

我们在 Java 7 中使用 Cobertura 插件 2.6 版,没有任何问题。这包括一些具有 Java 7 语法的文件(例如,multi-catch),这些文件曾经在早期插件版本中失败。我也不再需要在 SureFire 插件中使用-XX:-UseSplitVerifier

<properties>
    <coberturaMavenPlugin>2.6</coberturaMavenPlugin>
    <mavenSurefirePlugin>2.12</mavenSurefirePlugin>
</properties>
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${mavenSurefirePlugin}</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>${coberturaMavenPlugin}</version>
            <configuration>
                <aggregate>true</aggregate>
            </configuration>
        </plugin>
    </plugins>
</reporting>

【讨论】:

    【解决方案2】:

    除此之外,我们遇到的问题与 Cobertura 和 Xalan/Xerces 版本有关。

    查看http://mojo.codehaus.org/cobertura-maven-plugin/dependencies.html,可以看出cobertura插件在Xalan 2.6.0 & Xerces 2.6.2上有Transitive Dependencies。

    为了解决这个问题,我补充说:

    <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.11.0</version>
        <scope>test</scope>
    </dependency>
    

    并且测试通过了,无论是在使用 surefire 的初始测试阶段还是在 cobertura 阶段。

    【讨论】:

    【解决方案3】:

    也许您可以将编译器源和目标版本选项设置为版本“1.6”不同版本的构建工具可能会为此设置选择不同的默认值。 (如今,Buildr 1.4 默认使用 source 和 target 1.7;Maven 2.x 仍然使用 1.6 或更早版本。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多