2015-01-31 57 views
1

我们使用Cobertura为我们部署的Web应用程序生成测试覆盖率。它需要在应用程序的类路径中找到源JAR,以生成我们的HTML报告。在WAR文件的lib目录中包含源JAR(Web应用程序)

我们的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 

所以我们能够乐器,但只显示源文件为我们简介ServiceCore项目。我们想要是为我们的-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分开),但是这样做覆盖其他来源。所以我们可以包含网络服务源,但是当我们这样做时,我们会丢失CoreService的源文件。

我们使用Maven的配置文件 - 所以这仅是一个特定的仪器的部署,但我们想捏捏maven-war-plugin或类似的包括在lib文件夹中的-sources JAR web应用程序本身。

回答

2

首先,你必须配置你的war项目描述符包括来源罐子你的web应用,它可以简单地做出如下:

<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包括t他存档以添加,这应该是您的构建目录,因为构建*-sources.jar文件将会去那里。
  • 指定文物,包括即来源罐子这里假设它不会是什么,但有 来源后缀(默认名称模式)附加你的网页存档名称
  • includes元素。
  • targePath定义war存档中的目标,其中配置的包含将被复制。

要让你使用上述配置复制源代码jar文件,你必须告诉maven生成默认情况下没有完成的项目源代码。

这可以使用做到无缝连接行家来源-插件使用必要的特技通过提行家<phase>(其中源将被生成)必须阶段之前到来(缺省阶段为maven-war-plugin)例如准备包阶段,否则你不会得到这些来源包括在你的战争文件。到这里额外Maven的来源,插件配置应该被追加到上述的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您可以找到您可以复制一个工作样本/使用项目描述符组态。

相关问题