12

私はmaven3マルチモジュールプロジェクトを持っていますが、奇妙な理由で、子モジュールの1つ(つまり、module-pom.xml)のPOMファイル名をカスタマイズする必要があります

親 pom でこれを構成することは可能ですか?

奇妙な理由を説明するには少し長くなって申し訳ありませんが、わかりやすいコンテキストが得られます。

環境

  • 私は、LGPLed プロジェクトも使用するクローズド ソース プロジェクトに取り組んでいます。このプロジェクトはmain

  • main閉じたものと開いたものすべてのプロジェクトのモジュールを宣言したいと思います。完全なビルドは、独自のmvn clean packageコマンドで作成する必要があります。

  • mainリアクター プロジェクト内に、lgpl-reactor3 つの LGPL モジュール (API、プラグイン、ディストリビューション プロジェクト) を含むマルチモジュール プロジェクトがあります。一部の開発者はのみにアクセスできるため、完全にスタンドアロンのプロジェクトのように、lgpl-reactorこのプロジェクトをコマンドを使用してフォルダーからビルドすることも必要です。mvn clean package

  • またmain-dist、maven-assembly-plugin のみのプロジェクトであるプロジェクトもあります (ディストリビューションをビルドするため)。

問題

  • 親参照をlgpl-reactorpom.xml に追加すると、グローバルmainビルドは完全に機能し、によって作成されたアセンブリmain-distは有効ですが、lgpl-reactor のスタンドアロン ビルドは失敗します (メインの pom.xml が見つかりません)。

  • pom.xmlから親参照を削除するlgpl-reactorと、スタンドアロンlgpl-reactorビルドは機能しますが、によって作成されたアセンブリmain-distは有効ではありません (missing.

これを解決するには?

  • モジュール宣言リスト内のモジュール宣言には、別の POM ファイルmodule-pom.xmlを使用します。プロジェクトからフル ビルドを実行すると、親 POM への参照が含まれ、正常に動作します。lgpl-reactormainmainmodule-pom.xml

  • のスタンドアロン ビルドには、デフォルトの POM ファイルpom.xmllgpl-reactorを使用します。このPOMは、タグのrelativePathプロパティで親pomを参照することはほとんどできません<parent>

しかし、どうすればそれを行うことができますか? もし可能なら ?または、より良い解決策はありますか?

主な原子炉プロジェクトのディレクトリ

lgpl-lib [LGPL Library]
lgpl-ext [LGPL Reactor Project]
closed-core [Closed source module]
closed-spring [Closed source module]
closed-web [Closed source module]
closed-webserver [Closed source module]
main-dist [Main assembly module]
pom.xml [Main Reactor POM]

LGPL 原子炉プロジェクトのディレクトリ

lgpl-api [LGPL API module]
lgpl-plugins [LGPL Plugins module]
lgpl-ext-dist [LGPL assembly module]
main-pom.xml [Main Reactor POM, copy of main pom.xml]
pom.xml [Standalone LGPL Reactor POM]
module-pom.xml [Module LGPL Reactor POM]

メインリアクター POM (pom.xml & lgpl-reactor/main-pom.xml)

    ...
    <modelVersion>4.0.0</modelVersion>
    <groupId>main.group</groupId>
    <artifactId>main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Main</name>
    <packaging>pom</packaging>
    ...
    <modules>
        <module>closed-core</module>
        <module>closed-web</module>
        <module>closed-webserver</module>
        <module>closed-spring</module>
        <module>lgpl-reactor</module>
        <module>lgpl-lib</module>
        <module>main-dist</module>
    </modules>
    ...

lgpl-リアクター/pom.xml

...
<modelVersion>4.0.0</modelVersion>
<artifactId>lgpl-reactor</artifactId>
<name>LGPL Reactor</name>
<packaging>pom</packaging>

<parent>
    <groupId>main.group</groupId>
    <artifactId>main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>main-pom.xml</relativePath>
</parent>
...
    ...
<modules>
    <module>lgpl-api</module>
    <module>lgpl-plugins</module>
    <module>lgpl-ext-dist</module>
</modules>
    ...

のpom.xmlmain-dist

<project>
    <parent>
        <groupId>main.group</groupId>
        <artifactId>main</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>main-dist</artifactId>

    <packaging>pom</packaging>

    <description>Main Distribution</description>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>plugins-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>assembly.xml</descriptor>
                            </descriptors>
                            <appendAssemblyId>false</appendAssemblyId>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>closed</groupId>
            <artifactId>closed-webserver</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>closed</groupId>
            <artifactId>closed-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

assembly.xml のmain-dist

<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>plugins-assembly</id>
    <formats>
        <format>dir</format>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>
        <fileSet>
            <directory>../closed-webserver/conf</directory>
            <outputDirectory>conf</outputDirectory>
        </fileSet>
    </fileSets>

    <dependencySets>
        <dependencySet>
            <excludes><exclude>main.group:closed-webserver</exclude></excludes>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>

    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>

            <includes>
                <include>main.group:closed-webserver</include>
            </includes>

            <binaries>
                <outputFileNameMapping>${module.artifactId}${dashClassifier?}.${module.extension}</outputFileNameMapping>
                <unpack>false</unpack>
                <includeDependencies>false</includeDependencies>
            </binaries>
        </moduleSet>

        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>

            <includes>
                <include>main.group:closed-spring</include>
            </includes>

            <binaries>
                <outputFileNameMapping>${module.artifactId}${dashClassifier?}.${module.extension}</outputFileNameMapping>
                <unpack>false</unpack>
                <includeDependencies>false</includeDependencies>
            </binaries>

        </moduleSet>

        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>

            <includes>
                <include>main.group:lgpl-ext-dist</include>
            </includes>

            <binaries>
                <outputDirectory>plugins</outputDirectory>
                <unpack>false</unpack>
                <includeDependencies>true</includeDependencies>
            </binaries>

        </moduleSet>
    </moduleSets>

</assembly>
4

3 に答える 3

3

フォルダ構造を次のように変更することをお勧めします。

root (pom.xml)
  +-- closed-core
  +-- closed-web
  +-- closed-webserver
  +-- closed-spring
  +-- lgpl-reactor
         +-- lgpl-lib
         +-- lgpl-dist
         +-- lgpl-etc..

別の module-pom.xml ファイルは必要ありません。デフォルトで pom.xml を使用できます。

lgpl-reactory をビルドしたくない場合は、次のように指定できます。

mvn -pl lgpl-reactory clean package 

他のモジュール内に lgpl への依存関係がある場合は、次を使用できます。

mvn -am -pl lgpl-reactory clean package 

これにより、すべての依存モジュールもビルドされます。

于 2012-08-24T09:37:55.940 に答える
0

解決策は、逆のロジックを適用し、「mvn -f standalone-pom.xml クリーン パッケージ」を使用して lgpl-reactor をスタンドアロン プロジェクトとしてビルドすることです。コマンドライン。

于 2012-08-24T09:32:48.313 に答える