我们正在使用Cobertura为我们部署的Web应用程序生成测试覆盖率。它需要在应用程序的类路径中找到源JAR才能生成HTML报告。
我们的Maven构建产生:
target/our-webapp-sources.jar (about 40k)
target/our-webapp.war (about 20MB)
当在Tomcat中部署时,我们(在WEB-INF
下)
classes/... (the .class files) ...
lib/our-service-library.jar
lib/our-service-library-sources.jar
lib/our-core-library.jar
lib/our-core-library-sources.jar
因此我们可以进行检测,但只显示我们的已分析Service
和Core
项目的源文件。我们想要的是我们的-sources
JAR,因为webapp本身在lib
目录下作为依赖部署。所以我们想:
classes/... (the .class files) ...
lib/our-webapp-sources.jar
lib/our-service-library.jar
lib/our-service-library-sources.jar
...
我们可以手动指定(到Cobertura命令行脚本)一个目录来查找源文件(以为我们可以单独给它来源JAR),但这样做覆盖其他来源。因此,我们可以包含Web服务源,但是当我们这样做时,我们会丢失Core
和Service
的源文件。
我们正在使用Maven个人资料 - 因此这只是一个特定于仪器的部署,但我们想调整maven-war-plugin
或类似内容,以便在{{-sources
中包含lib
JAR 1}} webapp本身的文件夹。
答案 0 :(得分:2)
首先,您必须配置war
项目描述符以包含Web应用程序的 来源 jar,它可以简单地按如下方式进行:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- other components configuration -->
<build>
<finalName>war-with-sources</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>package-and-attach-sources</id>
<phase>package</phase>
</execution>
</executions>
<configuration>
<webResources>
<resource>
<directory>${project.build.directory}</directory>
<includes>
<include>${project.build.finalName}-sources.jar</include>
</includes>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
此处的相关部分是<webResources>
元素,它指示maven将其他资源包含在您的存档中,由以下内容确定:
directory
包括要添加的存档,这应该是您的构建目录,因为构建*-sources.jar
文件将会在那里。includes
元素指定要包含的工件,即来源jar假设它不会只是您的Web存档名称附加 sources 后缀(默认名称模式) targePath
定义war
存档中已配置包含的目标将被复制。要让您使用上述配置复制源文件,您必须告诉maven生成默认情况下未完成的项目源。
使用 maven-sources-plugin 可以通过提及maven <phase>
(其中将生成源代码)使用必要的技巧无缝完成必须来到包阶段之前(maven-war-plugin的默认阶段),例如 prepare-package 阶段,否则您无法获得war文件中包含的这些来源。这里是附加的 maven-sources-plugin 配置,应该附加到上面的 pom.xml 描述符中:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<build>
<finalName>war-with-sources</finalName>
<plugins>
<!-- other plugins configuration -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<phase>prepare-package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Here您可以找到一个可以复制/使用项目描述符配置的工作示例。