2011-01-13 11 views
27

一般的な開発ビルド中に特定の手順をスキップする(つまり、* -source.jarファイルをビルドしない)ように大きなプロジェクトのmavenビルドを変更する必要があります。私はmavenの "条件付き実行"を検索しましたが、何も見つかりませんでした。ビルドの実行を制御するためにMavenプロファイルを使用する

デベロッパープロファイルは、これを行う直感的な方法のように聞こえますが、私はどのように直感的なメイプがあるのか​​わかりません。プロファイル用ドキュメントでは、さまざまなプロファイル(データベース接続パラメータ)を設定する方法を示します。プロパティを設定し、そのプロパティがmaven-source-plugin-executions-executionタグに設定されているかどうかをテストできます。

これは、mavenで条件付き実行を行う正しい方法ですか?

mavenでこれを行う「正しい」方法は何ですか?

答えて

33

あなたはそれについて少し考えています:プロファイルを有効にして、の動作を無効にしないでください。これは、プロファイルが最適なものであり、まさにあなたのケースです。特定の状況でステップを実行したいだけです。だから、のようなものかもしれません:

<profile> 
    <id>source-jars</id> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-source-plugin</artifactId> 
     ... 

を、実際にちょうどmaven-source-plugin usage page上でこのような例があります。アーティファクトを生成する必要があるときは、mvn -P source-jars(または何でも)を使用します。それでおしまい!リリース時にのみ行う必要がある場合は、release pluginはリリースプラグインの設定で使用するプロファイルを定義する方法を提供します。

+0

私たちのpomsは、maven-source-pluginがデフォルトで実行される場所に書かれていますので、あなたの提案どおりに再構成する必要があります。 –

+3

多くの場合、プラグインはデフォルトでオンになっていることが望ましく、プロファイルを使用して無効にすることができます。私はこの答えが解決せずに問題を回避すると思います。 – Kevin

+1

@Mowgliしかし、Mavenプロファイルシステムは、それにはあまり適していません。「非アクティブ化」メカニズムではなく、「アクティベーション」メカニズムだけがあります。一部のプラグインでは、独自の非アクティブ化メカニズムを構築することでこれを処理します(たとえば、確実プラグインの場合はskipTests)。 –

6

POMに2つのプロファイルを追加することで、デフォルトでsource-jarsプラグインを有効にするという実際の目標を達成できます。あなたはactivationセクションに要素<activeByDefault>true</activeByDefault>を追加し、同じPOM内の別のプロファイルが以前に記載された方法

のいずれかを使用して活性化されていない限り、すべてのビルドのために

このプロファイルが自動的にアクティブになると述べていることができMaven profiles documentationノート

したがって、関連するプラグインを含むactiveByDefaultのプロファイルと、コマンドラインの-Pなどの任意の標準的な方法でアクティブ化できるプロファイルの2つのプロファイルを追加できますプロファイルは実行中です。あなたのpom.xml(またはMavenの設定や何でも)でprofilesセクションでは、したがって、次のようになります。

<profile> 
    <id>source-jars</id> 
    <activation> 
    <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-source-plugin</artifactId> 
     ... 
     </plugin> 
    </plugins> 
    </build> 
</profile> 
<profile> 
    <!-- active this profile to disable the source-jars plugin --> 
    <id>no-optional-plugins</id> 
</profile> 

残念ながら、私はこの方法では、複数のプラグインを制御するためにうまくスケール作るための方法を見ることができない - 私はあなたが必要だと思いますO(n^2)プラグインのプロファイルはnですが、この単純なケースでは正常に動作するはずです。

のMaven≥2.0.10のもう一つの可能​​性のシンプルなオプションは、ちょうど上記(まだactiveByDefault)からsource-jarsプロファイルを持つことである、とmanually deactivate the profileにあなたは-P CLIフラグの後-または!とプロファイルIDを付けることによってたいとき:

$ mvn -P !source-jars 

この方法では、複数のプラグインで同じ問題が発生することはありませんが、システムプロパティ、環境変数、JDKバージョンなどで無効にすることはできないため、柔軟性に欠けます。

+0

ありがとう、この例あなたは本当に私を助けてくれた – Hoto

関連する問題