dee*_*o55 79 maven-2 war maven maven-dependency-plugin
我正在编写一个验收测试项目,由于各种原因,这依赖于另一个打包为WAR的项目.我已经设法使用maven-dependency-plugin解压缩WAR,但我无法让我的项目包含unpacked WEB-INF/lib/*.jar
并WEB-INF/classes/*
包含在类路径中,因此构建失败.有没有办法将这些文件包含在类路径中,还是有更好的依赖WAR的方法?
非常感谢.
Chr*_*ter 110
自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>
Run Code Online (Sandbox Code Playgroud)
这将创建一个类工件,您可以在验证测试项目中使用它:
<dependency>
<groupId>your-group-id</groupId>
<artifactId>your-artifact-id</artifactId>
<version>your-version</version>
<classifier>classes</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Pas*_*ent 23
实际上,通过设计,Maven不会解决声明为项目依赖的战争的传递依赖性.实际上有一个问题,MNG-1991,但它不会在Maven 2.x中解决,我不确定我是否不知道覆盖是否允许解决这个问题.我对建议的解决方案的理解是复制依赖项,例如在pom类型的项目中.
(编辑:经过一些挖掘,我在这个帖子中找到了一些有趣的东西,我在下面引用:
在过去的一个月里,我一直在帮助开发AppFuse项目,我们在Maven war插件中大量使用了war叠加功能.这是一个非常漂亮的功能!
为了通过战争覆盖获得最大功率,我开发了Warpath插件,允许项目将war工件用作完全成熟的依赖项.简单来说:
1)war依赖项工件中/ WEB-INF/classes目录的内容可以包含在项目的类路径中,用于正常的编译等任务.
2)来自战争依赖项工件的传递依赖性可供其他插件使用,例如编译和收听 - 因此在创建瘦战时不再需要包含所有依赖项!该插件现在已经在AppFuse项目中被积极使用了几个月,我觉得它正处于可用和稳定的程度.war插件团队是否有兴趣在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>
[...]
Run Code Online (Sandbox Code Playgroud)
并将您希望包含在类路径中的war依赖项添加为warpath类型依赖项:
[...]
<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>
[...]
Run Code Online (Sandbox Code Playgroud)
war和warpath依赖类型都是必需的:Maven war插件使用war类型来进行war覆盖,Warpath插件使用warpath类型来确定包含在项目类路径中的正确的工件列表.
我试一试.)
cet*_*nar 14
使用叠加层.首先,您的测试项目还需要包装war
.
声明要测试的war项目的依赖关系:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>your-project-arftifactId</artifactId>
<version>${project.version}</version>
<type>war</type>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后配置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>
Run Code Online (Sandbox Code Playgroud)
在上面的测试项目示例中,我覆盖了webresources配置文件(如conxtext等).
编辑:此解决方案未使用Maven 3进行测试.
归档时间: |
|
查看次数: |
76998 次 |
最近记录: |