我知道这可能听起来像是错误的事情,但我试图做的是有一个Maven POM(模块),当安装时将打包为WAR,但另外还包含一个包含单个WAR的EAR。Maven使用分类器创建包含WAR的WAR和EAR作为一个模块?
澄清:我打算在我的项目自己的 EAR中包装每个现有的WAR。我期待的理由是,我正在考虑重新组织我们发布的WAR的方式,使每个WAR都包含在EAR中(但为了简化开发,仍然会生成独立的WAR工件)。我不急于创建一个依赖于WAR的新模块,并将它打包在EAR中,因为我有大量的WAR。
<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">
<parent>
...
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>se-index-webapp</artifactId>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
...
</configuration>
</plugin>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
<finalName>search-index.ear</finalName>
<classifier>ear</classifier>
<unpackTypes>war</unpackTypes>
<modules>
<webModule>
<groupId>${project.groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<uri>search-index.war</uri>
<bundleFileName>search-index.war</bundleFileName>
<contextRoot>/SearchIndex</contextRoot>
</webModule>
</modules>
</configuration>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
...
</dependencies>
</project>
我得到的错误:
目前我使用的是分类尝试这一点,我现有的WAR模块之一,没有成功
Artifact[war:myproject:se-index-webapp] is not a dependency of the project
是我试图做到可能吗?
考虑在你的战争计划你的pom.xml只能用战争解决,并部署在一个单独的“部署,为耳”的pom.xml调用。 – 2012-03-06 13:33:57
如果你想让东西更干净,那么这是不行的。据我所知,你试图做的事是不可能的,因为你隐含地创造了一个无限的依赖循环。您可以在Maven-user ML – 2012-03-06 13:42:59
上找到更好的选择在工作中,我们创建了一个自定义maven插件,将项目依赖性和工件封装在耳朵中,并根据工件类型创建部署描述符。与配置为创建瘦战的战争插件一起,这非常有效。这些项目最初是使用默认使用类似pakcaging的oracles jdeveloper创建的。我必须检查我是否可以以某种方式发布。 – 2012-03-06 21:30:44