当我使用 Maven 2 使用命令检测我的类时
mvn cobertura:instrument
输出(检测类)放在 \target\generated-classes 中。有没有办法将输出位置更改为 \target\classes?
我检查了 cobertura-maven 插件的检测任务,但这并没有给我一个解决方案。
当我使用 Maven 2 使用命令检测我的类时
mvn cobertura:instrument
输出(检测类)放在 \target\generated-classes 中。有没有办法将输出位置更改为 \target\classes?
我检查了 cobertura-maven 插件的检测任务,但这并没有给我一个解决方案。
您没有说明为什么要覆盖默认位置,但我认为这是为了让您可以使用来自另一个项目的检测类,或者可能将它们包含在 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% 但过去使用过类似的机制
据我了解,只有 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(片段)的答案,您只需要确定正确的阶段(流程资源对于您的情况来说绝对为时过早)
您是否尝试过“mvn cobertura:instrument install”?它将生成一个包含所有 cobertura 版本类的 jar 文件。如果您想改回原始版本,只需运行不带“cobertura:instrument”的命令。
我刚刚实现了 Andreas_D 提出的解决方案,修改了我的 pom 并使用了 maven-resources-plugin。所以在我构建的某个阶段,Cobertura 生成的文件被复制到 /target/classes 目录。
您可以使用<classesDirectory>[Your DIR]</classesDirectory>
在 cobertura-maven-plugin 2.4 版中,这仍然不受支持。我刚刚创建了一张改进票,补丁附在票上。