Java 如何更改Maven 2/Cobertura工具目标的默认输出?

Java 如何更改Maven 2/Cobertura工具目标的默认输出?,java,testing,maven-2,code-coverage,cobertura,Java,Testing,Maven 2,Code Coverage,Cobertura,当我使用Maven 2使用命令插入类时 mvn cobertura:仪器 插入指令的类的输出放在\target\generated类中。有没有办法将输出位置更改为\target\classes 我检查了cobertura maven插件的插装任务,但目前还没有给出解决方案。据我所知,插装类只在cobertura生成报告时才需要。如果在目标/类中创建它们,它们将覆盖原始类文件 如果因此需要jar中插入指令的文件,可以配置maven jar插件从目标/生成的类目录中提取文件,而不是从标准${buil

当我使用Maven 2使用命令插入类时

mvn cobertura:仪器

插入指令的类的输出放在\target\generated类中。有没有办法将输出位置更改为\target\classes


我检查了cobertura maven插件的插装任务,但目前还没有给出解决方案。

据我所知,插装类只在cobertura生成报告时才需要。如果在目标/类中创建它们,它们将覆盖原始类文件

如果因此需要jar中插入指令的文件,可以配置maven jar插件从目标/生成的类目录中提取文件,而不是从标准${build.project.outputDirectory}中提取文件,或者从标准${build.project.outputDirectory}中提取文件

编辑

看一看这张照片。要仅使用目标/生成的类,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.OutDirectory}指向目标/类。我不知道您是否可以简单地将${project.build.ouputDirectory}设置为一个新值-请查看,也许您会找到一些提示

编辑2


或者,在coberture:instrument完成后,您可以使用maven将文件从目标/生成的类复制到目标/类。有一个POM片段示例的答案,您只需确定正确的阶段流程资源对于您的案例来说显然太早了

我刚刚实现了Andreas_D提出的解决方案,修改了我的POM并使用了maven资源插件。因此,在我构建的某个阶段,Cobertura生成的文件被复制到/target/classes目录。

您可以使用Cobertura maven插件版本2.4中的[Your DIR]

对其进行配置。这仍然不受支持。我刚刚创建了一个修补程序,该修补程序已附加到票证。

您没有说明为什么要覆盖默认位置,但我假设是这样,您可以使用另一个项目中插入指令的类,或者可能将它们包含在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依赖此jar文件,例如,包括使用

<depends>
    <group>mygroup</group>
    <project>projectname</project>
    <version>1</version>
    <classifier>instrumented</classifier>
</depends>

我没有100%测试这个,但在过去使用过类似的机制

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

这将是覆盖目标/类的最佳选择,这样我的战争、罐子和耳朵的包装就不会受到影响。覆盖/设置${project.build.outputDirectory}以进行生成或打包是否足够?我需要在JAR/wars和EAR中插入这些插入指令的类。因此,我正在寻找一种方法,如何以简单的方式实现这一点。您是否为此找到了一个孤岛,使插入指令的类能够在classes文件夹中生成,并由m2eclipse获取并发布到tomcat?