Mavenがwarに共通するすべてのjarを同じEAR to EARルート内に配置するようにするにはどうすればよいですか?
-
21-08-2019 - |
質問
我々には数多くの戦争による解決策がある。戦争は、すべて冬眠と春を使用するという意味で似ています。これは、各戦争の中に同じ瓶が多数あることを意味します。耳のサイズが不釣り合いに大きくなり始めているため、これは問題になりつつあります。
Maven を使用して依存関係を計算し、複数の戦争に共通するすべての jar を EAR のルートに配置したいと考えています。
j2ee アーキタイプ (maven-archetype-j2ee-simple) を使用してプロジェクトを整理しようとしましたが、すべての war は依然として WEB-INF/lib 内の依存関係とともにパッケージ化されています。war や jar を構築するときにすべての移行依存関係を計算できるのと同じように、Maven に共通の依存関係を計算させて EAR に配置する方法はありますか?
解決
commons-jars という名前の新しいアーティファクトを作成し、pom としてパッケージ化します。これは、Spring、Hibernate、Log4j など、使用しているすべての一般的な jar に依存する必要があります。
次に、各 war にスコープ「provided」を持つ依存関係として追加します (タイプを pom に設定することを忘れないでください)。クラスパスでこれを確認できますが、war にはパッケージ化されません。このようにして、war 固有の依存関係をパッケージ化することもできます。 スキニーウォーズ は提供しません。
他のヒント
というコメントでは、mavenのタスクを計算し、毎依存性がある。だ作物は、全ての共通の依存関係は、それまで何とも言えないので、依存関係の帰属します。
でも、い展開の一戦は、依存関係うな声に耳を傾け、ときにセット毎に戦争への依存性を提供し穴にはまってます。
だけるように、スキニーの戦争での例:http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html
でも、そして興味深い点はあります。ショートカット(completlyているという事実にしかない場合は、上記の痛み、かmaven、依存関係のお争ています。
内耳-モジュールを宣言するのは、第二の依存関係は、戦型pomのための戦依存性がある。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.foo</groupId>
<artifactId>skinny</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ear</artifactId>
<packaging>ear</packaging>
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.8</version>
<configuration>
<skinnyWars>true</skinnyWars>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<modules>
<webModule>
<groupId>com.foo</groupId>
<artifactId>war</artifactId>
</webModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
現在は戦する独自のパッケージが依存関係を耳にするパッケージとスキニーの戦争べての依存関係の中のlibフォルダ
更新:
いうことで、耳/libフォルダのために用いることはできません毎jarの依存関係に厳しいコンテナのようなJBoss EAP6.JSFコンポーネントライブラリ用のようにトマホーク,primefaces。て居WEB-INF/libフォルダにまとめた。
手軽な方法を実現することにより上記の溶液は適用除外コンポーネントに図書館の耳pom.xml このように:
...
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<exclusion>
</exclusions>
</dependency>
</dependencies>
...
現在は毎依存性と戦っていて、それに近づくように耳/lib以外の品ライブラリの変更に関するお知らせWEB-INF/libの中の戦争
あなたはにの依存関係のスコープを設定することができます「提供」。これは、彼らが他のモジュールによって提供され、最終的に瓶や戦争には含まれないことを意味します。
最終的にアップパッケージ化する際にはあなたを助けることができる。