Mavenの親プロジェクトのモジュール間でリソースを共有する方法はありますか?たとえば、マルチモジュールMavenプロジェクトのすべてのモジュールに1つのlog4j.propertiesファイルを指定したいとします。
一般的に、私はEclipse IDEを使用して、一般的なプロジェクトを選択して親プロジェクトを作成し、次にpom
のパッケージを指定してそれをMavenプロジェクトに変換します。これにより、「クリーンな"src
などのフォルダがないプロジェクト構造。この場合、そのような共有リソースはどこに配置する必要があるのでしょうか。
EDIT1:親プロジェクトに共通リソースを配置したいと思います。
src/main/resources
に共通のリソースを含む、追加の「ベース」モジュール(プロジェクト)、パッケージ化「jar」を作成します。次に、他のモジュールをそのプロジェクトに依存させるようにします。これで、クラスパスに共通のリソースが表示されます。
別の可能性は、リモートリソースバンドルを使用することです。親プロジェクトで構成できます。この例では、テストのためだけにいくつかのファイルをコピーしたいと思いました。これを使用する場合は、別のプロジェクトでバンドルを作成する必要があります。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.5</version>
<configuration>
<resourceBundles>
<resourceBundle>es.sca:myBundle:1.0.0</resourceBundle>
</resourceBundles>
<attachToMain>false</attachToMain>
<attachToTest>true</attachToTest>
<appendedResourcesDirectory>${basedir}/src/test/resources</appendedResourcesDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
</plugin>
リソースやtestResources要素をpomに追加するだけでよいと思います。例えば。追加のテストリソースディレクトリにアクセスするには、以下を追加します。
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<testResource>
<directory>../global/src/test/resources</directory>
</testResource>
</testResources>
はい、それは可能な解決策のようです。しかし、親プロジェクトは子モジュールのすべての一般的な依存関係とMaven構成を指定するため、親プロジェクトでこれらのリソースを(追加モジュールを導入せずに)指定できるかどうかに興味がありました。親プロジェクトが最も適切な場所だと思います共通のリソースについても。
パッケージタイプpomの場合、目標packageを指定して共有リソースを管理する場合、次の(フォルダをチェック)をpomのbuildセクションに追加するだけですファイル:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-config-files</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/logconfig</outputDirectory>
<resources>
<resource>
<filtering>false</filtering>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
別の方法として、プロジェクトのルートpomを配置します。
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId>
<!-- don't propagate to child poms -->
<!-- this will only execute in root pom -->
<inherited>false</inherited>
<configuration>
<descriptors>
<descriptor>Assembly.xml</descriptor>
</descriptors>
<!-- don't add classifier -->
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugins>
そしてAssembly.xmlの例
<Assembly xmlns="http://maven.Apache.org/plugins/maven-Assembly-plugin/Assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/plugins/maven-Assembly-plugin/Assembly/1.1.2 http://maven.Apache.org/xsd/Assembly-1.1.2.xsd">
<id>resources</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.basedir}/resources/</directory>
<outputDirectory/>
<useDefaultExcludes>true</useDefaultExcludes>
<includes>
<include>**</include>
</includes>
</fileSet>
</fileSets>
</Assembly>
アセンブリプラグインはアーティファクトを生成して現在のリアクタにアタッチするため、インストールおよびデプロイされます。
いいえ、同じpomで標準の依存関係イベントとして使用することはできません。
重要なのは、生成されたアーティファクトを使用する別のプラグインの前に、アセンブリ(適切なフェーズ)をトリガーすることです。
例えば。あなたはあなたのルートpomに持つことができ、以下の設定があなたのすべてのモジュールに伝播されます:
<plugin>
<artifactId>some-maven-plugin</artifactId>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>goal</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>your.project.groupid</groupId>
<artifactI>your.project.artifactId</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</plugin>
このメソッドはプロジェクトで確認できます。 https://github.com/s4u/pgp-keys-mapresources
ディレクトリはすべてのモジュールで共有されます。
私はそれをこのように機能するように管理しました:
Project/Assembly/test/resources/META-INF/persistence.xmlファイルを作成し、これをpom.xmlに追加します。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-test-persistence-xml-resources</id>
<phase>process-test-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>src/</outputDirectory>
<resources>
<resource>
<directory>${project.parent.basedir}/Assembly/</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>