2017-01-16 70 views
2

私たちはかなり複雑なプロジェクトをAntで構築して使用していますが、今はMavenに移行しています。AntからMavenへの移行:EARプロジェクトを設定するにはどうすればよいですか?

  1. コアジャーと、コアジャーに依存するさまざまなフィルタージャーがあります。
  2. これらのjarは、他の依存するjarファイルといくつかのXMLファイルとともに、SARにアセンブルされます。私はこれを以下のfoo-sarと呼んでいます。
  3. JARが組み込まれていますが、このJARにはJavaコードは含まれておらず、アプリケーションxmlファイルはわずかです。私はこれを以下にfoo-jarと呼んだ。
  4. foo-jarおよびfoo-sarは、META-INFディレクトリにあるapplication.xmlファイルのEARにパッケージされています。

    • foo-jar
    • foo-sar
    • foo-ear

    両方foo-jarfoo-sarビルドうまく:

は、私は三つのサブプロジェクトとMavenプロジェクトを持っています。しかし、foo-earがビルドされた場合、application.xmlファイルを持つ耳が構築されますが、foo-jarfoo-sarは含まれません。

parent Dir --+ 
      | 
      +-- foo-ear 
      | 
      +-- foo-jar 
      | 
      +-- foo-sar 

正しい順序(foo-sarfoo-jar、そしてfoo-ear)内のすべての3つのプロジェクトを呼び出すpom.xml親ディレクトリ:私のディレクトリ構造は次のようになります。 foo-jarfoo-sarの両方が正しくビルドされています(つまり、Antビルドの結果と一致しています)。 foo-earプロジェクトはエラーなしでビルドされますが、foo-sarfoo-jarファイルは耳の根元に含まれません。

私はここでかなり単純なものがありません。たぶん追加のパラメータ、または別の設定です。

はここで耳のpom.xmlです:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-parent</artifactId> 
    <version>1.0.0</version> 
    </parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-app</artifactId> 
    <packaging>ear</packaging> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <version>2.10.1</version> 
     <configuration> 
      <artifactTypeMappings> 
      <!-- The sar is a "jboss-sar" and not just a "sar" --> 
      <artifactTypeMapping type="jboss-sar" mapping="sar"/> 
      </artifactTypeMappings> 
      <modules> 
      <jarModule> 
       <artifactId>foo-jar</artifactId> 
       <unpack>true</unpack> 
      </jarModule> 
      <sarModule> 
       <artifactId>foo-sar</artifactId> 
       <unpack>true</unpack> 
      </sarModule> 
      </modules> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

新たな問題

私は私が持っていた問題の一つは、<groupId>maven-ear-pluginためorg.apache.pluginsにしていないorg.apache.maven.pluginsに設定したということです実現しました。 Mavenがなぜこのエラーを検出しなかったのかわからないし、前にエラーをビルドしてしまいます。

私は正しいグループを設定すると、私は<generateApplicationXml>が偽だったことを指定したにも関わらずapplication.xmlが構築されていたことに気付い始めました。私はこれがgenerate-application-xmlのゴールで起こっていることを認識しました。明らかにデフォルトの<configuration>earのゴールです。したがって、generate-application-xmlゴールの場合は<execution>、ゴールの場合はearを個別に指定する必要がありました。

楽しい、楽しい、楽しい。

を除いて私はを生成するために耳を得ましたが、モジュール情報を少しずつ違うように設定しても、耳の依存関係はダウンロードされています。ここでは耳のための私のpom.xmlです:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-parent</artifactId> 
    <version>1.0.0</version> 
    </parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-app</artifactId> 
    <packaging>ear</packaging> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <version>2.10.1</version> 
     <executions> 
      <execution> 
      <id>skip-application-xml-generation</id> 
      <phase>package</phase> 
      <goals> 
       <goal>generate-application-xml</goal> 
      </goals> 
      <configuration> 
       <generateApplicationXml>false</generateApplicationXml> 
      </configuration> 
      </execution> 
      <execution> 
      <id>create-ear</id> 
      <phase>package</phase> 
      <goals> 
       <goal>ear</goal> 
      </goals> 
      <configuration> 
       <artifactTypeMappings> 
       <artifactTypeMapping type="jboss-sar" mapping="sar"/> 
       </artifactTypeMappings> 
       <modules> 
       <jarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-jar</artifactId> 
        <unpack>true</unpack> 
        <uri>FooJar.jar</uri> 
       </jarModule> 
       <sarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-sar</artifactId> 
        <unpack>true</unpack> 
        <uri>Foo.sar</uri> 
       </sarModule> 
       </modules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-sar</artifactId> 
     <version>${project.version}</version> 
     <type>sar</type> 
     <exclusions> 
     <exclusion> 
      <groupId>*</groupId> 
      <artifactId>*</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-jar</artifactId> 
     <version>${project.version}</version> 
     <exclusions> 
     <exclusion> 
      <groupId>*</groupId> 
      <artifactId>*</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    </dependencies> 
</project> 

そしてここでは、生成された耳です:

私は私の耳に含まれているからfoo-1.0.0.jarfoo-sar-1.0.0.sarを防ぐために、私の耳を設定するにはどうすればよい
$ ls -l foo-app/target/foo-app-1.0.0 
drwxr-xr-x 3 david staff  102 Jan 17 11:21 Foo.jar 
drwxr-xr-x 137 david staff  4658 Jan 17 11:21 Foo.sar 
drwxr-xr-x 4 david staff  136 Jan 17 11:21 META-INF 
-rw-r--r-- 1 david staff  3905 Jan 17 11:21 foo-1.0.0.jar 
-rw-r--r-- 1 david staff 50104182 Jan 17 11:21 foo-sar-1.0.0.sar 

?私の耳の<module>セクションは、私のモジュールに私の依存関係をマッピングしてはいけませんか?<configuration>

+0

。 – arghtype

+0

モジュールを ''に入れてモジュールをダウンロードしましたが、 'pom.xml'の' 'セクションは無視されています。私は、場所、名前、アンパックなどを指定することはできません。依存関係は通常の依存関係と同様に動作しているようです。それは動作していないようです。 –

+0

問題が見つかりました。私は ''は 'org.apache.plugins'であり、' org.apache.maven.plugins'ではないと指定しました。依存関係についてはあなたが正しいですが、私は今、上で説明したような他の問題を持っています。 –

答えて

0

解決策が見つかりました。おそらくもっと良い解決策がありますが、これは私が動作すると分かったことです。それは大きな、荒れ果てた、クルージュです。私が間違っていることを私に教えてください。が正しいとのやり方にしてください。

arghtypeとして、これらのモジュールを自分の依存関係に追加する必要があります。それはうまくいく。しかし、私はそれもすべての私の依存関係を含み、それらを私の耳にもダウンロードすることがわかりました。私が含まれている私のモジュールの1つが、膨大な数のjar依存関係を含むSARであることを考慮すると、それはちょうど愚かでした。

依存関係を解消するために、最初は依存関係の説明で<exclusions>を試しましたが、追加したjarとsarを取り除いていませんでした。私が最後にしたのはを私のpom.xmlに入れて、これらのダウンロードを防ぐことでした。

これは動作しますが、これを行うのより良い方法がなければならない:私はあなたにもアーティファクトの名前が十分ではありません提供し、EARプロジェクトの依存関係としてあなたのjarモジュールを追加すべきだと思う

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-parent</artifactId> 
    <version>1.0.0</version> 
    </parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-app</artifactId> 
    <packaging>ear</packaging> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <version>2.10.1</version> 
     <executions> 
      <execution> 
      <id>skip-application-xml-generation</id> 
      <phase>package</phase> 
      <goals> 
       <goal>generate-application-xml</goal> 
      </goals> 
      <configuration> 
       <generateApplicationXml>false</generateApplicationXml> 
      </configuration> 
      </execution> 
      <execution> 
      <id>create-ear</id> 
      <phase>package</phase> 
      <goals> 
       <goal>ear</goal> 
      </goals> 
      <configuration> 
       <artifactTypeMappings> 
       <artifactTypeMapping type="jboss-sar" mapping="sar"/> 
       </artifactTypeMappings> 
       <modules> 
       <jarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-jar</artifactId> 
        <unpack>true</unpack> 
        <uri>FooJar.jar</uri> 
       </jarModule> 
       <sarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-sar</artifactId> 
        <unpack>true</unpack> 
        <uri>Foo.sar</uri> 
       </sarModule> 
       </modules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-sar</artifactId> 
     <version>${project.version}</version> 
     <type>sar</type> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-jar</artifactId> 
     <version>${project.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
</project> 
関連する問題