2012-03-06 25 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

相關問題