【问题标题】:How to change the default output from a Maven 2 / Cobertura instrument goal?如何更改 Maven 2 / Cobertura 仪器目标的默认输出?
【发布时间】:2011-01-02 20:35:01
【问题描述】:

当我使用 Maven 2 使用命令检测我的类时

mvn cobertura:instrument

输出(检测类)放在\target\generated-classes 中。有没有办法将输出位置更改为 \target\classes?

我检查了 cobertura-maven 插件的检测任务,但这并没有给我一个解决方案。

【问题讨论】:

  • 帕斯卡。您是否为此找到了一个解决方案,可以在 classes 文件夹中生成检测类,并进一步被 m2eclipse 拾取以发布到 tomcat?

标签: java testing maven-2 code-coverage cobertura


【解决方案1】:

您没有说明为什么要覆盖默认位置,但我认为这样做是为了您可以使用来自另一个项目的检测类,或者可能将它们包含在 Web 存档或类似文件中。

我在 pom.xml 中添加了以下内容

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <id>instrumented-classes</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <classifier>instrumented</classifier>
                <classesDirectory>${project.build.directory}/generated-classes/cobertura</classesDirectory>
            </configuration>
         </execution>
    </executions>
</plugin>

这使得 maven 生成一个名为 projectname-instrumented.jar 的附加 jar 文件

然后可以使用

从任何其他 pom(包括例如 web 模块)依赖这个 jar 文件
<depends>
    <group>mygroup</group>
    <project>projectname</project>
    <version>1</version>
    <classifier>instrumented</classifier>
</depends>

我没有对此进行 100% 测试,但过去曾使用过类似的机制

【讨论】:

    【解决方案2】:

    据我了解,只有 cobertura 需要检测类来生成报告。如果你在target/classes创建它们,它们会覆盖原来的类文件。

    如果您因此需要 jar 中的检测文件,您可以配置 maven-jar-plugin 以从 target/generated-classes 目录中获取文件,而不是标准 ${build.project.outputDirectory} 中的文件,或者除了这些文件之外。

    编辑

    看看maven-jar-plugin description。要仅使用 target/generated-classes,您的 POM 中的以下添加应该可以工作 - 尝试并根据您的需要进行修改:

    <project>
      ...
      <build>
        <plugins>
          ...
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3</version> <!-- replace with correct version nbr! -->
            <configuration>
              <includes>
                <include>${project.build.directory}/generated-classes/**/*.class</include>
              </includes>
              <excludes>
                <exclude>${project.build.directory}/classes/**/*.class</include>
              </excludes>
    
            </configuration>
          </plugin>
          ...
        </plugins>
      </build>
      ...
    </project>
    

    ${project.build.directory} 指向您的目标文件夹,${project.build.ouputDirectory} 指向目标/类。我不知道你是否可以简单地将${project.build.ouputDirectory} 设置为一个新值 - 看看this chapter of the maven book,也许你会找到一些提示

    编辑 2

    coberture:instrument 完成后,您也可以使用 maven 将文件从目标/生成类复制到目标/类。 This question 有一个示例 POM(片段)的答案,您只需要确定正确的阶段(流程资源对于您的情况来说绝对为时过早)

    【讨论】:

    • 这将是覆盖目标/类的最佳选择,这样我的战争、罐子和耳朵的包装就不会受到影响。覆盖/设置 ${project.build.outputDirectory} 是否足以生成或打包?
    • 我需要在我的 jars/wars 和 ears 中使用那些检测类。所以我正在寻找一种简单的方法来实现这一点。
    【解决方案3】:

    您是否尝试过“mvn cobertura:instrument install”?它将生成一个包含所有 cobertura 版本类的 jar 文件。 如果您想改回原始版本,只需运行不带“cobertura:instrument”的命令即可。

    【讨论】:

      【解决方案4】:

      我刚刚实现了 Andreas_D 提出的解决方案,修改了我的 pom 并使用了 maven-resources-plugin。所以在我构建的某个阶段,Cobertura 生成的文件被复制到 /target/classes 目录。

      【讨论】:

        【解决方案5】:

        您可以使用&lt;classesDirectory&gt;[Your DIR]&lt;/classesDirectory&gt;进行配置

        【讨论】:

          【解决方案6】:

          在 cobertura-maven-plugin 2.4 版中,这仍然不受支持。我刚刚创建了一个improvement ticket,补丁附在票证上。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 2015-11-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多