有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将源JAR(web应用程序的)包含在WAR文件的lib目录中

我们正在使用Cobertura为我们部署的web应用程序生成测试覆盖率。为了生成HTML报告,它需要在应用程序的类路径上找到源JAR

我们的Maven build生产:

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项目的源文件。我们想要的是我们的-sourcesJAR,以便将webapp本身部署为lib目录下的依赖项。所以我们想要:

classes/... (the .class files) ...
lib/our-webapp-sources.jar
lib/our-service-library.jar
lib/our-service-library-sources.jar
...

我们可以手动指定(对Cobertura命令行脚本)一个目录来查找源文件(认为我们可以单独给它一个sources JAR),但这样做会覆盖其他源文件。因此,我们可以获得包含的web服务源,但是当我们这样做时,我们会丢失CoreService的源文件

我们使用的是Maven概要文件——因此这只是一个特定于工具的部署,但我们希望调整maven-war-plugin或类似的配置,将-sourcesJAR包含在webapp本身的lib文件夹中


共 (1) 个答案

  1. # 1 楼答案

    首先,您必须将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元素,指定要包含的工件,即sources jar,假设它不是别的,而是附加了sources后缀的web归档文件名(默认名称模式)
    • ^将复制war存档中定义目标的{},其中配置了include

    要使用前面提到的配置复制源jar文件,必须告诉maven生成项目源,默认情况下不会这样做

    这可以通过使用maven sources插件无缝完成,使用一个必要的技巧,比如准备包阶段,否则您将无法将这些来源包括在war文件中。下面是附加的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您可以找到一个工作示例,从中可以复制/使用项目描述符配置