戦争としてパッケージ化されている別のMavenプロジェクトからwebapp/WEB-INF/リソースをコピーする必要があるMavenプロジェクトがあります。どうすればいいのですか ?提案してください
3 に答える
私はいくつかの選択肢を見ることができます:
- バージョン管理システムで外部参照を使用して、すべてのリポジトリが同じファイルを指すようにします。
- Maven依存関係モジュールは、プロジェクトの依存関係をコピーして解凍できます。そこから、Mavenアセンブリプラグイン(またはAntターゲット)を使用して、その依存関係の一部を自分のインストールに含めることができます。
- 少なくともFTLファイルの場合は、それらを別のJarファイルにパッケージ化してから、クラスローダーを介してリソースとしてロードすることができます。
リソースがフィルタリングされている場合、フィルタリングされたバージョンが必要な場合はソリューション1で、ソースバージョンが必要な場合は2、3で問題が発生する可能性があります。
お役に立てれば。
Bittranceが言ったように、Maven依存関係プラグインを使用する必要があります。
より良い方法は、すべての共有リソースを含むプロジェクトを作成することです。おそらく、タイプzipであり、アセンブリプラグインで構築されます。これは良い「MavenWay」です。戦争を解くよりも良い解決策です。
次に、それを参照してください
<dependency>
<groupId>com.mygroup/groupId>
<artifactId>my-dependencies</artifactId>
<version>1.0.0</version>
<type>zip</type>
</dependency>
次に、maven依存関係プラグインを使用して、選択したディレクトリ(おそらくWEB-INF /?)でリソースを解凍します。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-cfg-test-resources</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<phase>resources</phase>
<configuration>
<outputDirectory>${project.build.directory}/WEB-INF/</outputDirectory>
<includeArtifacIds>my-resources</includeArtifacIds>
<excludeTypes>pom</excludeTypes>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
このコードスニペット(別の目的で作成されたもの)についてはよくわかりませんが、これは例です。詳細については、次のリンクをたどってください:http: //maven.apache.org/plugins/maven-dependency-plugin/
ファイルを含む共通プロジェクトを共有できない場合は、ftl(または必要なもの)のみを含むwarを解凍できますが、これは本当にクリーンなソリューションではありません;)
このテーマを扱った投稿はたくさんあります: mavenの依存関係を解凍し ます...キーワードmaven-dependency-plugin、unpackを試してみてください:)
それがあなたを助けることを願っています。
(これは、依存プロジェクトがjava(jar)であり、別のWebアプリではないことを前提としています。Webアプリの場合、ソリューションは類似していると思います)。
(少し)異なるアプローチを提案
します。戦争からリソースを読み取る代わりに、これを戦争pomに追加して、アーティファクトと戦争でjarを生成します。
<!-- maven war plugin config -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<configuration>
...
<attachClasses>true</attachClasses>
<classesClassifier>some-string</classesClassifier>
</configuration>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
...
<resources>
<!-- This is for inclusion in the jar, so dependent module can load it -->
<resource>
<targetPath>some-path</targetPath>
<directory>src/main/webapp/path...</directory>
<includes>
<include>your-resource</include>
</includes>
</resource>
</resources>
そして、これを消費するpomに送信すると、生成されたjarがロードされます。
<dependency>
<groupId>com.company</groupId>
<artifactId>...</artifactId>
<classifier>some-string</classifier>
</dependency>
その後、通常の方法でリソースをロードできるようになります(getResourceAsStream("some-path/your-resource")
)