2012-03-06 7 views
1

これは間違っているように聞こえるかもしれないが、私が試しているのは、Maven POM(モジュール)をインストールするとWARとしてパッケージ化されますが、さらに単一のWARを含むEARとしてパッケージ化されることです。クラシファイアを使用してそのWARを1つのモジュールとして含むWARとEARをMavenで作成しますか?

明確にする:自分のプロジェクトの既存の各WARを自身の EARにラップすることを検討しています。

私の願望の背後にあるのは、リリースされたWARをパッケージ化する方法を再構築することです。なぜなら、それぞれがEAR内に含まれるように(ただし開発の容易さのために独立したWARアーティファクトを生成するように)私は、WARに依存する新しいモジュールを作成し、それをEARにパッケージ化することに熱心ではありません。なぜなら、WARの負荷があるからです。

現在、私はクラシファイア使用して、私の既存の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> 

を私はエラーを取得:

Artifact[war:myproject:se-index-webapp] is not a dependency of the project 

は、どのようなIです可能なことをしようとしていますか?

+0

warプロジェクトのpom.xmlには戦争のみを扱い、配備時には別の "deploy-as-ear" pom.xmlを呼び出すことを検討してください。 –

+0

あなたが何かクリーナーを持っていることを試みているなら、これは行く方法ではありません。あなたが暗黙のうちに無限の依存サイクルを作成しているので、あなたがしようとしていることは私の知識には不可能です。 MavenユーザML –

+0

でより良いオプションが見つかるかもしれません。仕事では、プロジェクトの依存関係と成果物を耳の中にパッケージ化し、成果物タイプに基づいて配備記述子を作成するカスタムMavenプラグインを作成しました。スキニー戦争を作成するために設定された戦争プラグインと一緒に、これは素晴らしい仕事です。これらのプロジェクトは、デフォルトで同様のpakcagingを使用するoracle jdeveloperで最初に作成されました。私は何とかこれを公表できるかどうかを確認する必要があります。 –

答えて

0

を変更する必要がある最初の事は、次のような構造になり、別のEARモジュール持つようにMavenの規則に基づいています。あなたは非常に単純なあなたのmod-戦争のモジュールへの依存関係を定義することができるよりも

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

を提供することによって

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

このアプローチの利点は、耳に属する情報と耳のモジュールに属する情報を分離したことです。

その結果、ルートレベルでmvnクリーンパッケージを実行したり、mvn install/deployを実行して、戦争だけでなく耳もリポジトリに展開できます。

+0

答えをありがとうが、私はこれを行う方法を理解しています。しかし、私はこのEARに1つのWARをラップするために追加のモジュールを避けたいと思います(私はEARで囲むことがたくさんあるので) –

+1

好きなものは何でも、あなたはMavenと戦い始めます。;-) numberは引数ではありません... – khmarbaise

関連する問題