1

私の親pomは 7 つのモジュールを定義しています。そのうち 5 つが依存関係jarであり、2 つがwarそれらの jar に依存する です。

質問: maven profiles(または別のソリューション) を使用してmvn install、2 つの war パッケージを除外するために親 pom に対して実行されたときに含まれるモジュールを定義することは可能ですか?

次に、2 つの戦争をパッケージ化するための別のプロファイル (または別のソリューション) が必要です。そのプロファイルが実行されている場合、依存関係の jar モジュールは、リポジトリにない場合にのみ再構築してインストールする必要があります。

4

1 に答える 1

1

build-helper-maven-plugin親ファイルで を使用して、pom.xmlに基づいて新しいプロパティを作成できますpackaging(実行時にpom、親jarからwarモジュールに変更されます)。maven-install-pluginこの新しいプロパティは、動的にスキップするために使用できます。

簡単な例:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
        <execution>
            <id>build-helper-regex-is-packaging-war</id>
            <phase>validate</phase>
            <goals>
                <goal>regex-property</goal>
            </goals>
            <configuration>
                <name>only.when.war.is.used</name>
                <value>${project.packaging}</value>
                <regex>war</regex>
                <replacement>true</replacement>
                <failIfNoMatch>false</failIfNoMatch>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <configuration>
        <skip>${only.when.war.is.used}</skip>
    </configuration>
</plugin>

そうすることで、動的${only.when.war.is.used}プロパティは値を持つ場合にtrueのみに設定され、オプションを介して実行を効果的にスキップします。project.packagingwarmaven-install-pluginskip


次に、この動作をプロファイルに移動して、 と の異なる設定をjar行い、動的な動作のおかげでwarroot という共通の場所に保持できます。pom.xml


アーティファクトが既にインストールされているかどうかを検出する機能に関しては、プラグインの公式ドキュメントにはそのようなオプションはなく、単にプラグインを使用するだけでそのような動作を行うことはできないと思います.

ただし、ファイル (インストールされたファイル) が見つからない場合は、 maven プロファイルのアクティブ化メカニズムを使用して、それに応じてプロファイルをアクティブ化できます。

動的な方法で (標準プロパティのみに基づいて) 次のアプローチを使用できます。

<profiles>
  <profile>
    <activation>
      <file>
        <missing>${settings.localRepository}/${project.groupId}/${project.artifactId}/${project.build.fileName}.${project.packaging}</missing>
      </file>
    </activation>
    ...
  </profile>
</profiles>
于 2016-08-25T16:41:45.593 に答える