2012-03-06 29 views
1

我知道这可能听起来像是错误的事情,但我试图做的是有一个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 

是我试图做到可能吗?

+0

考虑在你的战争计划你的pom.xml只能用战争解决,并部署在一个单独的“部署,为耳”的pom.xml调用。 – 2012-03-06 13:33:57

+0

如果你想让东西更干净,那么这是不行的。据我所知,你试图做的事是不可能的,因为你隐含地创造了一个无限的依赖循环。您可以在Maven-user ML – 2012-03-06 13:42:59

+0

上找到更好的选择在工作中,我们创建了一个自定义maven插件,将项目依赖性和工件封装在耳朵中,并根据工件类型创建部署描述符。与配置为创建瘦战的战争插件一起,这非常有效。这些项目最初是使用默认使用类似pakcaging的oracles jdeveloper创建的。我必须检查我是否可以以某种方式发布。 – 2012-03-06 21:30:44

回答

0

你必须是基于Maven的约定更改为有一个单独的EAR模块,这将导致以下结构的第一件事:

+-- root (pom.xml) 
     +--- mod-ear (pom.xml) packaging: ear 
     +--- mod-war (pom.xml) packaging: war 

比你可以定义依赖于你的Mod-WAR模块很简单通过给予

<dependencies> 
     <dependency> 
      <groupId>..</groupId> 
      <artifactId>..</artifactId> 
      <version>..</version> 
     </dependency> 
    ... 
    </dependencies> 

这种方法的优点是你已经分开属于耳朵的信息和属于耳朵模块的信息。

的结果是,你可以在根级别做一个MVN清洁套装或做MVN安装/部署其部署战争以及耳到你的资料库。

+0

感谢您的答案,但我明白如何做到这一点。但是,我想避免使用额外的模块来包装这个EAR中的单个WAR(因为我有太多的东西需要用EAR包装) – 2012-03-15 10:07:20

+1

无论你喜欢什么,但你会开始与maven战斗...... ;-)号码不是一个参数... – khmarbaise 2012-03-15 10:12:16

相关问题