3

有没有人能够将 maven2 与 Aspectj 插件和 Cobertura 插件一起使用?当我应该得到一些东西时,我一直得到 0% 的覆盖率。Cobertura 仪器在 Aspectj 编织之前运行,我认为这会破坏 Cobertura 仪器。此外,Cobertura 正在对我的方面发出警告,看起来它正试图将它们解析为 java 文件。任何帮助,将不胜感激。

C:\project>mvn cobertura:cobertura
[INFO] 正在扫描项目...
[信息] --------------------------------------------- -------------------------
[INFO] 建筑工程
[INFO] 任务段:[cobertura:cobertura]
[信息] --------------------------------------------- -------------------------
[INFO] 准备 cobertura:cobertura
[INFO] [aspectj:编译{执行:编译}]
[信息] [资源:资源]
[INFO] 使用 'UTF-8' 编码复制过滤的资源。
[INFO] 复制 1 个资源
[信息] [编译器:编译]
[INFO] 无需编译 - 所有类都是最新的
[信息] [cobertura:仪器]
[信息] Cobertura 1.9.2 - GNU GPL 许可证(无担保) - 请参阅版权文件
Cobertura:加载了 538 个类的信息。
将 538 个文件检测到 C:\project\target\generated-classes\cobertura
Cobertura:保存了 538 个类的信息。
仪器时间:3938ms

[INFO] 检测成功。
[INFO] [aspectj:test-compile {执行:test-compile}]
[信息] [资源:testResources]
[INFO] 使用 'UTF-8' 编码复制过滤的资源。
[INFO] 复制 1 个资源
[信息] [编译器:testCompile]
[INFO] 无需编译 - 所有类都是最新的
[信息] [万无一失:测试]
[INFO] Surefire 报告目录:C:\project\target\surefire-reports

-------------------------------------------------- -----
 测试
-------------------------------------------------- -----
运行 project.AnnounceTypeActionTest

测试运行:3,失败:0,错误:0,跳过:0,经过时间:0.594 秒

结果 :

测试运行:3,失败:0,错误:0,跳过:0

[信息] [cobertura:cobertura]
[信息] Cobertura 1.9.2 - GNU GPL 许可证(无担保) - 请参阅版权文件
Cobertura:加载了 538 个类的信息。
Javancss.(InputStream).e:net.sourceforge.cobertura.javancss.ParseException:在第 5 行第 8 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...

[cobertura] WARN [main] net.sourceforge.cobertura.reporting.ComplexityCalculator - JavaNCSS 在解析 java 文件 C:\project\src\main\java\Project\logging\ApplicationLoggingAspect.aj 时出错
STDIN 中的 ParseException
最后一个有用的检查点:“project.logging”。
在第 5 行第 8 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...


Javancss.(InputStream).e:net.sourceforge.cobertura.javancss.ParseException:在第 4 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...

[cobertura] WARN [main] net.sourceforge.cobertura.reporting.ComplexityCalculator - JavaNCSS 在解析 java 文件 C:\project\src\main\java\Project\logging\LoggingAspect.aj 时出错
STDIN 中的 ParseException
最后一个有用的检查点:“project.logging”。
在第 4 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...


Javancss.(InputStream).e:net.sourceforge.cobertura.javancss.ParseException:在第 6 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...

[cobertura] WARN [main] net.sourceforge.cobertura.reporting.ComplexityCalculator - JavaNCSS 在解析 java 文件 C:\project\src\main\java\Project\logging\TracingAspect.aj 时出错
STDIN 中的 ParseException
最后一个有用的检查点:“project.logging”。
在第 6 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...


报告时间:5891ms

[INFO] Cobertura 报告生成成功。
[信息] Cobertura 1.9.2 - GNU GPL 许可证(无担保) - 请参阅版权文件
Cobertura:加载了 538 个类的信息。
Javancss.(InputStream).e:net.sourceforge.cobertura.javancss.ParseException:在第 5 行第 8 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...

[cobertura] WARN [main] net.sourceforge.cobertura.reporting.ComplexityCalculator - JavaNCSS 在解析 java 文件 C:\project\src\main\java\Project\logging\ApplicationLoggingAspect.aj 时出错
STDIN 中的 ParseException
最后一个有用的检查点:“project.logging”。
在第 5 行第 8 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...


Javancss.(InputStream).e:net.sourceforge.cobertura.javancss.ParseException:在第 4 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...

[cobertura] WARN [main] net.sourceforge.cobertura.reporting.ComplexityCalculator - JavaNCSS 在解析 java 文件 C:\project\src\main\java\Project\logging\LoggingAspect.aj 时出错
STDIN 中的 ParseException
最后一个有用的检查点:“project.logging”。
在第 4 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...


Javancss.(InputStream).e:net.sourceforge.cobertura.javancss.ParseException:在第 6 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...

[cobertura] WARN [main] net.sourceforge.cobertura.reporting.ComplexityCalculator - JavaNCSS 在解析 java 文件 C:\project\src\main\java\Project\logging\TracingAspect.aj 时出错
STDIN 中的 ParseException
最后一个有用的检查点:“project.logging”。
在第 6 行第 17 列遇到“方面”。
期待其中之一:
    “@”...
    “抽象的” ...
    “最后” ...
    “上市” ...
    “同步” ...
    “严格”...
    “班级” ...
    “静止的” ...
    “受保护” ...
    “私人的” ...
    “本国的” ...
    “短暂的” ...
    “易挥发的” ...
    “枚举” ...
    “界面” ...


报告时间:3125ms

[INFO] Cobertura 报告生成成功。
[信息] --------------------------------------------- -------------------------
[信息] 构建成功
[信息] --------------------------------------------- -------------------------
[INFO] 总时间:30 秒
[INFO] 完成时间:Wed Sep 02 17:15:45 VET 2009
[INFO] 最终内存:26M/254M
[信息] --------------------------------------------- -------------------------
4

2 回答 2

2

我有使用 aspectj-maven-plugin 进行编译并使用 cobertura-maven-plugin 进行代码覆盖的项目。对于编译时编织,这在运行时可以正常工作mvn site,尽管测试被编译/运行两次以允许 Cobertura 编织。

使用以下配置运行mvn site会产生以下输出:

[INFO] Preparing surefire-report:report
[INFO] [aspectj:compile {execution: compile_with_aspectj}]
...
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
...
[INFO] [compiler:testCompile {execution: test-compile}]
[INFO] Compiling 8 source files to C:\test\aop-test
[INFO] [aspectj:test-compile {execution: test-compile_with_aspectj}]
...
[INFO] [surefire:test]
...
[INFO] Preparing cobertura:cobertura
[INFO] [aspectj:compile {execution: compile_with_aspectj}]
...
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [cobertura:instrument]
[INFO] Cobertura 1.8 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Instrumenting 11 files to C:\test\aop-test\generated-classes\cobertura
Cobertura: Saved information on 11 classes.
Instrument time: 250ms

[INFO] Instrumentation was successful.
[INFO] [compiler:testCompile {execution: test-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [aspectj:test-compile {execution: test-compile_with_aspectj}]
...
[INFO] [surefire:test]
...
Cobertura: Coverage data file C:\test\aop-test\cobertura.ser either 
    does not exist or is not readable.  Creating a new data file.
Cobertura: Saved information on 8 classes.

我的配置包括在下面。

关于方面的 Cobertura 警告,您可以尝试的一件事是将建议执行主体移动到 java 类型,而不是在方面中定义它。

例如,而不是这样做:

before(Throwable e, Object subject): handlers(e, subject) {
    Log logger = getTraceLog(subject.getClass());

    //code to trace exception handling
    ...
}

相反,您可以将实现委托给 Java 类型,因此方面中要处理的代码很少:

before(Throwable e, Object subject): handlers(e, subject) {
    Log logger = getTraceLog(subject.getClass());

    //get helper type and delegate processing to that type.
    getFormatterHelper().traceErrorHandling(logger, thisJoinPoint, e);
}

我对 aspectj 和 cobertura 插件的配置:

<build>
  <plugins>
    ...
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>aspectj-maven-plugin</artifactId>
      <version>1.2</version>
      <executions>
        <execution>
          <id>compile_with_aspectj</id>
          <goals>
            <goal>compile</goal>
          </goals>
          <configuration>
            <complianceLevel>1.5</complianceLevel>
          </configuration>
        </execution>
        <execution>
          <id>test-compile_with_aspectj</id>
          <goals>
            <goal>test-compile</goal>
          </goals>
          <configuration>
            <complianceLevel>1.5</complianceLevel>
          </configuration>
        </execution>
      </executions>
      <dependencies>
        <dependency>
          <groupId>aspectj</groupId>
          <artifactId>aspectjtools</artifactId>
          <version>1.6.4</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</build>
...
<reporting>
  <plugins>
  ...
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>cobertura-maven-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <formats>
          <format>html</format>
          <format>xml</format>
        </formats>
        <outputDirectory>target/site/cobertura</outputDirectory>
      </configuration>
    </plugin>
  <plugins
</reporting>
于 2009-09-13T13:24:07.867 回答
0

我遇到了同样的问题(试图运行在 Hudson 上报告的覆盖率)并通过从 aspectj 执行目标中删除“test-compile”目标来解决它。在那之后,Cobertura 和 Emma 都像魅力一样工作。

我的 AspectJ 部分:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>aspectj-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <goals>
        <goal>compile</goal>
        <!-- <goal>test-compile</goal> --> 
      </goals>
    </execution>
  </executions>
  <configuration>  
    <source>1.6</source>  
    <weaveWithAspectsInMainSourceFolder>true</weaveWithAspectsInMainSourceFolder> 
    <weaveMainSourceFolder>true</weaveMainSourceFolder> 
  </configuration> 
</plugin>

我的 Cobertura 部分:

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

以防万一,我的艾玛部分:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>emma-maven-plugin</artifactId>
  <version>1.0-alpha-2</version>
</plugin>
于 2010-09-03T13:19:09.453 回答