2

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

mvn cobertura:instrument

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

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

4

6 回答 6

3

您没有说明为什么要覆盖默认位置,但我认为这是为了让您可以使用来自另一个项目的检测类,或者可能将它们包含在 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% 但过去使用过类似的机制

于 2011-05-11T14:48:21.337 回答
1

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

如果因此需要 jar 中的检测文件,则可以配置maven-jar-plugin以从target/generated-classes目录中获取文件,而不是从标准${build.project.outputDirectory}.

编辑

看看maven-jar-plugin 描述。仅使用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}一个新值-看看maven book的这一章,也许你会找到一些提示

编辑 2

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

于 2010-01-08T10:28:04.130 回答
1

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

于 2012-04-02T08:36:20.730 回答
0

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

于 2010-01-08T14:06:31.490 回答
0

您可以使用<classesDirectory>[Your DIR]</classesDirectory>

于 2010-06-09T15:23:19.713 回答
0

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

于 2011-03-10T17:05:17.513 回答