2011-03-02 123 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