Maven WAR依赖

我正在编写一个验收测试项目,由于各种原因,这取决于另一个打包为WAR的项目。 我设法使用maven-dependency-plugin解压WAR,但是我无法让我的项目包含解压缩的WEB-INF/lib/*.jarWEB-INF/classes/*以包含在类路径中,所以构建失败。 有没有办法将这些文件包含到类路径中,还是有更好的方法来取决于WAR?

非常感谢。


自从maven-war-plugin 2.1-alpha-2以来还有另一种选择。 在你的WAR项目中:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        <attachClasses>true</attachClasses>
    </configuration>
</plugin>

这会创建一个类别工件,您可以在验收测试项目中使用它:

<dependency>
    <groupId>your-group-id</groupId>
    <artifactId>your-artifact-id</artifactId>
    <version>your-version</version>
    <classifier>classes</classifier>
</dependency>

的确,Maven在设计上并没有解决声明为项目依赖的战争的传递依赖关系。 实际上有一个关于MNG-1991的问题,但它在Maven 2.x中不会解决,我不确定是否我不知道覆盖是否允许解决此问题。 我对建议的解决方案的理解是复制依赖关系,例如在类型为pom的项目中。


(编辑:经过一些挖掘,我发现这个线程中有趣的东西,我在下面引用:

上个月我一直在帮助开发AppFuse项目,我们在Maven war插件中大量使用战争覆盖功能。 这是一个非常漂亮的功能!

为了通过战争叠加获得最大能力,我开发了Warpath插件,允许项目使用战争工件作为完全成熟的依赖关系。 简单来说:

1)war依赖项构件中的/ WEB-INF / classes目录的内容可以包含在正常编译等项目的项目类路径中。
2)来自战争依赖性工件的传递依赖性可供其他插件使用,例如编译和耳朵 - 所以在创建小战争时不必再包含所有的依赖关系!

这个插件现在在过去的几个月里已经在AppFuse项目中得到了积极的使用,并且我觉得它正处于可用和稳定的阶段。 战争插件团队是否有兴趣在war插件中包含warpath功能? 它似乎是举办它最自然的地方。

所以,我没有任何经验,但maven warpath插件实际上看起来不错并且简单,并且可以在中央仓库中找到。 要使用它,请在您的pom.xml文件中包含以下插件配置元素:

[...]
<build>
  <plugins>
    <plugin>
      <groupId>org.appfuse</groupId>
      <artifactId>maven-warpath-plugin</artifactId>
      <version>1.0-SNAPSHOT</version>
      <extensions>true</extensions>
      <executions>
        <execution>
          <goals>
            <goal>add-classes</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
[...]

然后添加要包含在类路径为坚持强硬立场类型的依赖战争的依赖关系:

[...]
<dependencies>
  <dependency>
    <groupId>org.appfuse</groupId>
    <artifactId>appfuse-web</artifactId>
    <version>2.0</version>
    <type>war</type>
  </dependency>
  <dependency>
    <groupId>org.appfuse</groupId>
    <artifactId>appfuse-web</artifactId>
    <version>2.0</version>
    <type>warpath</type>
  </dependency>
</dependencies>
[...]

战争和战争路径依赖类型都是必需的:战争类型由Maven war插件用于执行战争覆盖,Warpath插件使用Warpath类型来确定包含在项目类路径中的正确工件列表。

我会试试看。)


使用重叠。 首先,你的测试项目也需要打包war

声明你想测试的战争项目的依赖性:

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>your-project-arftifactId</artifactId>
    <version>${project.version}</version>  
    <type>war</type>
    <scope>test</scope>
</dependency>

然后配置maven-war-plugin overlay:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
            <webResources>
                <resource>
                    <directory>${basedir}/src/main/webresources</directory>
                    <filtering>true</filtering>
                </resource>
            </webResources>
            <overlays>
                <overlay/>
                <overlay>
                    <groupId>your.group</groupId>
                    <artifactId>your-project-artifactId</artifactId>
                </overlay>
            </overlays>
        </configuration>
    </plugin>

在上面的示例中,我在测试项目中覆盖了webresources配置文件(如conxtext等)。

编辑:这个解决方案没有用Maven 3进行测试。

链接地址: http://www.djcxy.com/p/29679.html

上一篇: Maven WAR dependency

下一篇: Is it possible to rename a maven jar