3

約 12 か月前に maven ear プラグインの使用を開始しましたが、代替手段があるかどうかを確認したいと考えています。Maven の利点の 1 つは依存関係の管理ですが、ear プラグインではこれがほぼ完全に失われているようです。すべての依存 jar が ear に組み込まれますが、以下の構成を追加しない限り、実際にはそれらのいずれもクラスパスに配置されません。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <version>6</version>
        <modules>
            <ejbModule>
                <groupId>com.mycompany.app</groupId>
                <artifactId>MyApplication-ejb</artifactId>                          
            </ejbModule>

            <jarModule>
                <groupId>axis</groupId>
                <artifactId>axis</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
            <jarModule>
                <groupId>commons-discovery</groupId>
                <artifactId>commons-discovery</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
            <jarModule>
                <groupId>axis</groupId>
                <artifactId>axis-wsdl4j</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
        </modules>
    </configuration>
</plugin>

プラグインの最近のバージョンではこれが不要になっていますが、これを管理する代替手段はありますか? モジュールに依存関係を追加するたびに、それを ear pom 構成に追加する必要があるとは信じられません。最も苛立たしいのは、上記の構成に依存ライブラリを追加することを覚えていても、それが別のものに依存している場合 (軸の場合のように)、耳を展開したときにしかわかりません。

4

2 に答える 2

5

最初に、次のような ear (そしてもちろん ear ) 用の別のモジュールが必要です。

root
  +-- client
  !     +--- pom.xml
  +-- service
  !     +--- pom.xml
  +-- ear
        +--- pom.xml

次に、現在のバージョンが 2.6 であるため、ear プラグインのバージョンを更新する必要があります。さらに、パーツを依存関係として定義します

 <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ear-plugin</artifactId>
        <version>2.5</version>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>webgui</artifactId>
      <version>${project.version}</version>
      <type>war</type>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>service</artifactId>
      <version>${project.version}</version>
      <type>ejb</type>
    </dependency>
  </dependencies>

使用している構成は、パッケージ化する必要がある補足のサードパーティ ライブラリを対象としています。

于 2011-08-16T10:58:29.077 に答える
3

khmarbaise の回答に加えて、EJB モジュールがライブラリにアクセスできるようにするには、次のMETA-INF/MANIFEST.MFように内部に依存関係を含めるように構成する必要があることに注意してください。

<plugin>
    <artifactId>maven-ejb-plugin</artifactId>
    ...
    <configuration>
        ...
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
    ...
</plugin>
于 2014-05-02T12:19:02.190 に答える