2011-03-02 129 views
19

我有一个应用程序的EAR,我需要用我自己的代码打包成WAR。有没有一个Maven插件可以帮助我将WAR放入EAR中?如何在EAR中添加WAR与Maven

手动过程是将WAR放入EAR中并将模块添加到application.xml。我想自动化。编辑:小澄清 - WAR项目使用maven但是对于EAR我只有二进制文件没有更多。

回答

0

添加WAR作为依赖关系,并使用maven ear plugin。然后使用ear:generate-application-xml目标,最后使用ear:ear目标。

+0

也许我错过了一些东西,但我不知道如何使用Maven耳塞。问题是我没有该EAR的来源。 – stalker 2011-03-02 12:13:41

+1

如果您有EAR文件,您可以将其解压缩:http://maven.apache.org/plugins/maven-ear-plugin/examples/unpacking-a-module.html,然后添加战争,更改application.xml并将其打包再次。 – 2011-03-02 12:24:22

42

我会创建一个新的模块,它有<packaging>ear</packaging>

在依赖此耳模块,包括你的war模块:

<dependency> 
    <groupId>com.your.group.id</groupId> 
    <artifactId>your-war-artifact</artifactId> 
    <version>your-war-version</version> 
    <type>war</type> 
</dependency> 
在构建插件,这款耳塞模块

现在,包括Maven的耳插件,例如像:

<plugin> 
    <artifactId>maven-ear-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <finalName>MyEarFile</finalName> 
     <version>5</version> 
     <generatedDescriptorLocation>${basedir}/src/main/application/META-INF</generatedDescriptorLocation> 
     <modules> 
      <webModule> 
       <groupId>com.your.group.id</groupId> 
       <artifactId>your-war-artifact</artifactId> 
       <uri>YouWarFile.war</uri> 
       <bundleFileName>YouWarFile.war</bundleFileName> 
       <contextRoot>/appname</contextRoot> 
      </webModule> 
     </modules> 
    </configuration> 
</plugin> 

您可以根据需要更改webModule的特定配置值。

现在创建一个父模块(与<packaging>pom</packaging>),并添加战争模块和耳模块。确保你正确地设置了战争和耳朵模块的<parent>

当你为这个新父母运行mvn package时,战争文件将由war模块构建,ear文件(包含战争)将由ear模块构建。

+0

我是否必须将WAR作为依赖项添加到EAR pom.xml中?它将如何知道我的WAR在web模块中的位置? – Tushar 2012-10-25 13:31:43

+0

你试过了吗?如上所述,您需要耳机模块的依赖性。 maven-ear-plugin不需要war文件的确切位置/路径,因为它将其称为maven工件(使用webModule元素中指定的groupId和artifactId)。 – joelittlejohn 2012-10-26 11:05:01

+0

@joelittlejohn为什么我需要两次声明神器“你的战争神器”?一旦进入依赖部分,并再次进入'webModule'部分?你能解释一下吗? – Geek 2016-07-11 13:02:09