Maven clover2 触发重复 class 异常
Maven clover2 triggers duplicate class exception
这是参考 https://jira.atlassian.com/browse/CLOV-1471
的 JIRA 票证
该问题与发布在 JIRA 仪表板上的问题类似,即:
我们有几个 maven 项目,它们有多个源目录。非默认目录是使用 build-helper 插件添加的。 clover2:setup 目标检测所有源文件夹,然后将所有非生成目录设置为 Maven 项目中的源文件夹。这会导致编译错误,因为源文件同时存在于 clover 检测源和原始位置。
以下是我们如何使用 build-helper-maven-plugin
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-shared-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>../SomeOtherModule1/src/main/java/com</source>
<source>../SomeOtherModule2/src/main/java/com</source>
<source>../SomeOtherModule3/src/main/java/com</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
这就是我们在构建配置文件中使用 clover2 插件的方式:
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-clover2-plugin</artifactId>
<version>4.0.0</version>
<configuration combine.self="override">
<targetPercentage>$
{code_coverage_target}
</targetPercentage>
<licenseLocation>$
{clover_license_location}
</licenseLocation>
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>instrument-test</goal>
<goal>check</goal>
<goal>clover</goal>
</goals>
</execution>
</executions>
</plugin>
没有 clover 插件,构建编译正常。但在添加三叶草插件后,我们收到几个错误,提示发现重复 类。
我是不是漏掉了什么?
我认为这是因为您使用的是 clover2:instrument 而不是 clover2:setup 目标。 clover2:instrument 派生了一个自定义构建生命周期,在此构建周期中,它在 'validate' 阶段执行检测。由于您的 'add-source' 目标绑定到生成源阶段,build-helper-maven-plugin 在 Clover 之后而不是之前运行。
我建议使用 clover2:setup 绑定到验证或初始化阶段(即在生成源之前)。
这是参考 https://jira.atlassian.com/browse/CLOV-1471
的 JIRA 票证该问题与发布在 JIRA 仪表板上的问题类似,即: 我们有几个 maven 项目,它们有多个源目录。非默认目录是使用 build-helper 插件添加的。 clover2:setup 目标检测所有源文件夹,然后将所有非生成目录设置为 Maven 项目中的源文件夹。这会导致编译错误,因为源文件同时存在于 clover 检测源和原始位置。
以下是我们如何使用 build-helper-maven-plugin
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-shared-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>../SomeOtherModule1/src/main/java/com</source>
<source>../SomeOtherModule2/src/main/java/com</source>
<source>../SomeOtherModule3/src/main/java/com</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
这就是我们在构建配置文件中使用 clover2 插件的方式:
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-clover2-plugin</artifactId>
<version>4.0.0</version>
<configuration combine.self="override">
<targetPercentage>$
{code_coverage_target}
</targetPercentage>
<licenseLocation>$
{clover_license_location}
</licenseLocation>
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>instrument-test</goal>
<goal>check</goal>
<goal>clover</goal>
</goals>
</execution>
</executions>
</plugin>
没有 clover 插件,构建编译正常。但在添加三叶草插件后,我们收到几个错误,提示发现重复 类。
我是不是漏掉了什么?
我认为这是因为您使用的是 clover2:instrument 而不是 clover2:setup 目标。 clover2:instrument 派生了一个自定义构建生命周期,在此构建周期中,它在 'validate' 阶段执行检测。由于您的 'add-source' 目标绑定到生成源阶段,build-helper-maven-plugin 在 Clover 之后而不是之前运行。
我建议使用 clover2:setup 绑定到验证或初始化阶段(即在生成源之前)。