3つの異なるライブラリで構成されるプロジェクトがあります。インストールスクリプトを実行すると、すべてのライブラリがリポジトリから取得され、それらに対してmvn clean installが実行されます。しかし、このバージョンのライブラリはすでにリポジトリにインストールされています。ローカルリポジトリのpom.xmlのバージョンが同じ場合、インストールフェーズをスキップする方法はありますか?.
ローカルリポジトリを使用して依存関係を設定できることはわかっています。しかし、上司は私たちのプロジェクトがパブリックリポジトリのみで、リポジトリなしで構築できることを望んでいます。
このようにバイパスできます
-Dmaven.install.skip=true
<profiles>
<profile>
<id>skipInstall</id>
<activation>
<property>
<name>maven.install.skip</name>
<value>true</value>
</property>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
先週、Olivier Lamyがこのジラにパッチを適用しました。
ほとんどのMavenプラグインは、次のように指定することでスキップできます。
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>X.Y</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
プロパティを設定するビルドプロファイルを設定し、それを使用して値を決定することもできます。たとえば、コマンドmvn -Pexampleを実行すると、「example」プロファイルが選択されます。 POMには次のものが含まれます。
...
<properties>
<skip.install>false</skip.install>
...
</properties>
...
<profile>
<id>example</id>
<properties>
<skip.install>false</skip.install>
</properties>
</profile>
...
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>X.Y</version>
<configuration>
<skip>${skip.install}</skip>
</configuration>
</plugin>
...
これらのPOM追加を使用すると、インストールプラグインのデフォルトの動作はデフォルトの目標を実行することになりますが、サンプルプロファイルが選択されている場合、インストールプラグインはその目標をスキップします。
他の答えから学んだことを使用して、これは私にとって最もきれいな結果でした。
スーパーpomにpluginManagement/pluginを追加して、プロパティdeployOnly
が設定されている場合にデフォルトのインストールおよびデフォルトのテストフェーズを無効にしました。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>default-install</id>
<configuration>
<skip>${deployOnly}</skip>
</configuration>
</execution>
<execution>
<id>default-test</id>
<configuration>
<skip>${deployOnly}</skip>
</configuration>
</execution>
</executions>
</plugin>
したがって、コマンドラインで-DdeployOnly
を追加して、インストールフェーズとテストフェーズを無効にできます。
mvn clean install #build and test everything
mvn deploy -DdeployOnly #just deploy it
ローカルリポジトリを使用して依存関係を設定できることはわかっています。しかし、上司は私たちのプロジェクトがパブリックリポジトリのみで、リポジトリなしで構築できることを望んでいます。
あなたが上司の意味を正しく理解しましたか?私は上記を「ローカルリポジトリにサードパーティのライブラリをインストールせず、パブリックリポジトリで利用可能なライブラリのみを使用する」と解釈します。これは、基本的に不可能である「ローカルリポジトリを使用しない」とは異なります。これは、Mavenの動作方法ではありません。この点を明確にしようと思います。
それとは別に、非常に混乱するような質問はありません(どのレポについて話しているのですか?インストールスクリプトは何をしているのですか?ライブラリでクリーンインストールを呼び出すのはなぜですか?など)。
未来から他の答えを拡張します。
Mavenプラグインには驚くほど高い自由度があります。必要に応じて、一般的なpom.xml設定を無視または上書きできます。さらに、<configuration><skip>true</skip></configuration>
は単なる慣例であり、プラグインが従うことを義務付けるものはありませんが、それらのほとんどはそうです。
最近の問題に関する私の実験では、@ Cemoと@MiloshBoroyevichの両方のソリューションを使用する必要があることを示しています。より具体的には、私が実行した唯一の構成はこれでした:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
</executions>
<configuration>
<skip>true</skip>
</configuration>
</plugin>