私がすでにこのバージョンをレポにインストールしている場合、Mavenビルドのインストールフェーズをスキップする方法
質問
3つの異なるライブラリで構成されるプロジェクトがあります。インストールスクリプトを実行すると、すべてのライブラリをレポから取得し、MVNクリーンインストールを実行します。しかし、このバージョンのライブラリはすでにレポにインストールされています。私のローカルリポジトリの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>
先週、オリビエ・ラミーはこのジラにパッチを当てました。
他のヒント
ほとんどのMavenプラグインは、次のようなものを指定することでスキップできます。
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>X.Y</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
また、ビルドプロファイルを設定してプロパティを設定し、それを使用して値を決定することもできます。たとえば、コマンドの実行:mvn -pexampleは「例」プロファイルを選択します。 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で、プロパティのときにデフォルトインストールとデフォルトテストフェーズを無効にするプラグインマネージメント/プラグインを追加しました 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'sと@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>