Ant ビルドから Maven 3 ビルドにアプリケーションを移行しています。このアプリはによって構成されています:
- ビルドするすべてのモジュールを指定する親プロジェクト
- jaxb を使用してクラスを生成し、それらを使用して jar を構築するプロジェクト
- EJB プロジェクトをビルドするプロジェクト
- 戦争モジュールを構築する 3 つのプロジェクト
- 耳を作る 1 つのプロジェクト
これは私の親 pom からの抜粋です:
<groupId>com.test</groupId>
<artifactId>P</artifactId>
<packaging>pom</packaging>
<version>04.01.00</version>
<modules>
<module>../PValidationJaxb</module> <-- jar
<module>../PValidation</module> <-- ejb
<module>../PImport</module> <-- war
<module>../PTerminal</module> <-- war
<module>../PWebService</module> <-- war
<module>../PEAR</module> <-- ear
</modules>
私は同じ起源を持っていると思われるいくつかの問題を抱えています。おそらく、私が理解できない依存関係管理の問題です:
生成されるモジュールは、親 pom からビルドするか、単一のモジュールからビルドするかによって異なります。通常、PImport のみをビルドすると、生成された war は ant ビルドの場合と同様になり、親 pom からビルドすると、war は 20MB かかり、他のモジュールからの多くの依存関係が追加されました。どちらの戦争も順調に進んでいます。
私のプロジェクト PWebService には、ビルド中に実行される単体テストがあります。依存関係として cglib を持つ mock-ejb を使用しています。これには ClassNotFound の問題があり、それを除外して cglib-nodep への依存関係を追加する必要がありました (最後の pom 抽出を参照)。次に、このモジュールのみをビルドすると、うまく機能します。しかし、親プロジェクトからビルドすると、他のモジュールの他の依存関係にも cglib への暗黙の依存関係があるため、失敗します。すべてのモジュールpomでそれを除外し、依存関係をどこでもcglib-nodepに追加して実行する必要がありました。
私の構成で何か重要なことを見逃していますか?
PValidation pom 抽出物:
xdocletによって生成されたインターフェースを備えたejbとクライアントjarを含むjarを作成しています。
<parent>
<groupId>com.test</groupId>
<artifactId>P</artifactId>
<version>04.01.00</version>
</parent>
<artifactId>P-validation</artifactId>
<packaging>ejb</packaging>
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>P-jaxb</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.5.ga</version>
<exclusions>
<exclusion>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2.2</version>
</dependency>
...
[other libs]
...
</dependencies>
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<ejbVersion>2.0</ejbVersion>
<generateClient>true</generateClient>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xdoclet-maven-plugin</artifactId>
...
PImport pom 抽出:
これは、Jaxb で生成された jar と ejb クライアント jar の両方に依存します。
<parent>
<groupId>com.test</groupId>
<artifactId>P</artifactId>
<version>04.01.00</version>
</parent>
<artifactId>P-import</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>P-jaxb</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.test</groupId>
<artifactId>P-validation</artifactId>
<version>${project.version}</version>
<type>ejb-client</type>
</dependency>
...
[other libs]
...
</dependencies>
PWebService pom 抽出 :
<parent>
<groupId>com.test</groupId>
<artifactId>P</artifactId>
<version>04.01.00</version>
</parent>
<artifactId>P-webservice</artifactId>
<packaging>war</packaging>
<properties>
<jersey.version>1.14</jersey.version>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.rte.etso</groupId>
<artifactId>etso-validation</artifactId>
<version>${project.version}</version>
<type>ejb-client</type>
</dependency>
...
[other libs]
...
<dependency>
<groupId>org.mockejb</groupId>
<artifactId>mockejb</artifactId>
<version>0.6-beta2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>cglib</groupId>
<artifactId>cglib-full</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2.2</version>
<scope>test</scope>
</dependency>
</dependencies>
どうもありがとう
構成の変更後の解決策:
プロジェクトを既にマベナイズしたとき、フォルダーレイアウトの規則を尊重しませんでしたが、ソースを見つける場所でポンポンで宣言されていたので、うまくいくと思いました。とにかく、推奨構造に合わせて変更しました。
単一のモジュールをビルドするために、そのレベルで mvn clean install を直接実行していました。このようにして、私は別の結果を得ました (実際、これは私が望んでいたものです)。
とにかく、私の問題は解決しました。生成されたクライアントを他のモジュールに含めるだけで、実装に必要なものをすべて必要としないため、PValidation プロジェクトのすべての依存関係を提供されたとおりに置きます。
しかし、同じ構成で異なる結果が得られた理由はまだわかりません。