web-dev-qa-db-ja.com

マルチモジュールのMavenプロジェクトで共通のリソースを指定する

Mavenの親プロジェクトのモジュール間でリソースを共有する方法はありますか?たとえば、マルチモジュールMavenプロジェクトのすべてのモジュールに1つのlog4j.propertiesファイルを指定したいとします。

一般的に、私はEclipse IDEを使用して、一般的なプロジェクトを選択して親プロジェクトを作成し、次にpomのパッケージを指定してそれをMavenプロジェクトに変換します。これにより、「クリーンな"srcなどのフォルダがないプロジェクト構造。この場合、そのような共有リソースはどこに配置する必要があるのでしょうか。

EDIT1:親プロジェクトに共通リソースを配置したいと思います。

28
jilt3d

src/main/resourcesに共通のリソースを含む、追加の「ベース」モジュール(プロジェクト)、パッケージ化「jar」を作成します。次に、他のモジュールをそのプロジェクトに依存させるようにします。これで、クラスパスに共通のリソースが表示されます。

27
Andreas_D

別の可能性は、リモートリソースバンドルを使用することです。親プロジェクトで構成できます。この例では、テストのためだけにいくつかのファイルをコピーしたいと思いました。これを使用する場合は、別のプロジェクトでバンドルを作成する必要があります。

    <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>                 
4
borjab

リソースやtestResources要素をpomに追加するだけでよいと思います。例えば。追加のテストリソースディレクトリにアクセスするには、以下を追加します。

    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
        </testResource>
        <testResource>
            <directory>../global/src/test/resources</directory>
        </testResource>
    </testResources>

参照 Maven-オーバーライドテストリソースフォルダー

1
work.asr

はい、それは可能な解決策のようです。しかし、親プロジェクトは子モジュールのすべての一般的な依存関係と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>
1
harvyS

別の方法として、プロジェクトのルート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ディレクトリはすべてのモジュールで共有されます。

0

私はそれをこのように機能するように管理しました:

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>
0
Zeeshan Asghar