0

我们有一个使用 clover 和 axistools-wsdl2java 插件的 maven 项目。平台是窗户。

我们正在使用 clover 2.4.0 插件来获取集成在项目 pom.xml 中的代码覆盖率。如下图所示配置了三叶草插件。

<plugin> 
    <groupId>com.atlassian.maven.plugins</groupId> 
    <artifactId>maven-clover2-plugin</artifactId> 
    <version>2.4.0</version> 
    <configuration> <generatePdf>true</generatePdf> 
    <generateXml>true</generateXml> 
    <generateHtml>true</generateHtml> 
    <licenseLocation>C:/EcasSVNCO/ews/ews-mvn/ewsbase/src/test/resources/license/clover.license</licenseLocation> 
    <reportDescriptor>C:/EcasSVNCO/ews/ews-mvn/ewsbase/src/test/resources/descriptor/default-clover-report.xml</reportDescriptor> 
    <excludes> 
        <exclude>${basedir}/src/main/java/*.java</exclude> 
    </excludes> 
    </configuration> 
        <executions> 
            <execution> 
                <id>install</id> 
                <phase>install</phase> 
                <goals> 
                    <goal>instrument</goal> 
                    <goal>clover</goal> 
                </goals> 
            </execution> 
            <!--
            <execution> 
                <id>test</id> 
                <phase>test</phase> 
                <goals> 
                    <goal>instrument</goal> 
                    <goal>clover</goal> 
                </goals> 
             </execution> 
             <execution> 
                <id>site</id> 
                <phase>pre-site</phase> 
                <goals> 
                    <goal>instrument</goal> 
                    <goal>clover</goal>
                </goals>
            </execution> 
            -->
        </executions> 
</plugin>

此外,还有一个axistools插件,用于使用wsdl文件生成类,配置如下。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>axistools-maven-plugin</artifactId>
    <version>1.4</version>
    <configuration>
        <sourceDirectory>${base.dir}/src/main/resources/wsdl</sourceDirectory>
        <outputDirectory>${base.dir}/src/main/java</outputDirectory>
        <wsdlFiles>
            <wsdlFiles>wsecas.wsdl</wsdlFiles>
        </wsdlFiles>


        <packageSpace>com.symantec.wsecas</packageSpace>
        <testCases>true</testCases>
        <serverSide>true</serverSide>
        <phase>install</phase>
        <subPackageByFileName>true</subPackageByFileName>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

当我们执行命令 'mvn clean install' 时,编译会正常进行。然后首先运行axistool的wsdl2java目标,并在各自的目录中生成源文件。Next clover 插件尝试通过运行单元测试用例来检测源代码,当此插件将检测的源代码放在 {basedir}/target/clover/src/main/java/... 下时,它会触发“编译”目标进行编译所有的源代码。在编译源代码时,添加了两个源路径,即 {basedir}/src/main/java/... 和 {basedir}/target/clover/src/main/java/... ,它们都有相同的类。当 maven 编译器尝试编译这些源时,编译会因抛出“重复类错误”而失败。

但是当我们注释掉axistools插件时,clover检测和报告生成就很好了。

如果你们中的任何人遇到过类似的问题“重复类错误”,请在这方面指导我们。任何建议和帮助将不胜感激。

4

1 回答 1

0

似乎问题在于您的 Axis 插件生成了 src/main/java 的源代码(它应该是一个目标/src 生成的)。

当调用 Clover 时,它将首先从 src/main/java 获取“正常”源,检测它们并放入 target/clover/java。Next Clover 将更改源根列表,将 src/main/java 替换为 target/clover/java。

接下来,AXIS 代码生成开始发挥作用,它再次在 src/main/java 中生成新的源代码,并将此目录添加为额外的源代码根目录。

结果,编译器在两个位置看到相同的源集(即非生成源)并抱怨它。

此案例与 Clover 知识库中描述的案例非常相似:

https://confluence.atlassian.com/display/CLOVERKB/Duplicate+class+errors+with+Clover+and+JAXB+or+JAXB2+plugin

https://confluence.atlassian.com/display/CLOVERKB/Duplicate+class+errors+with+Clover+and+jaxws-maven+plugin

您将在这些文章中找到可能的解决方案。

于 2013-11-05T20:10:16.507 回答