2012-03-26 9 views
0

私は様々なLinuxディストリビューションでディストリビューション特有のビルドを行うカスタムエンフォーサルールを書いてテストしました。提供されているpom.xmlビルドスニペットを使用して、mvn enforcer:enforceコマンドで正常にテストされます。カスタムエンフォーサルールを使用したMaven3プロファイルは可能ですか?

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.0-beta-1</version> 
    <dependencies> 
     <dependency> 
     <groupId>org.example</groupId> 
     <artifactId>maven-enforcer-rule-redhat6x</artifactId> 
     <version>1.0</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <rules> 
     <redhat6x implementation="org.example.enforcer.Redhat6x"> 
      <compatible>true</compatible> 
     </redhat6x> 
     </rules> 
    </configuration> 
    <executions> 
     <execution> 
     <id>enforce</id> 
     </execution> 
    </executions> 
    <goals> 
     <goal>enforce</goal> 
    </goals> 
    </plugin> 
</plugins> 

私の脳をラッキングし、実験的な多くのテストを行った後、私は、プロファイルの活性化セレクタとしてこのカスタム・執行規則を使用する方法を見つけるように見えることはできません。

<profiles> 
    <profile> 
     <id>RedHat6x</id> 
     <activation> 
     <!-- Something goes here, but what? This doesn't work --> 
      <redhat6x implementation="com.cisco.tesdw.enforcer.Redhat6x"> 
       <compatible>true</compatible> 
      </redhat6x> 
     </activation> 
    </profile> 
    </profiles> 

は、セクション「どのように私は、ビルド時に有効であるどのプロファイル伝えることができる」セクションの下Introduction to Profilesページで説明するように、プロファイルの活性化がmaven-enforcer-rulesを使用していることをいくつかのヒントがあります。つまり、複数の文字列値(os名など)を持つすべてのプロファイルのアクティベーションは、対応するMavenエンフォーサルールを参照します。しかし、pom.xmlとadding such would likely require a pom version updateでは、カスタムプロファイルアクティベータを直接インクルードすることは明らかではないようです。

Maven3も非常に柔軟性のある方法で拡張可能です.Maven拡張メカニズムによるエンフォーサルールのフックをフックすることは可能ですか?カスタムライフサイクル参加者を含める方法に関するドキュメントがあります。ビルドが始まるまでにプロファイルのアクティブ化が既に行われている可能性があることを私は恐れる。ドキュメンテーションはまばらですが、javadocはAbstractMavenLifecycleParticipant.afterProjectsRead(MavenSession session)が "すべてのMavenProjectインスタンスが作成された後に"呼び出されることを示しています。これは、呼び出されているかどうかがプロファイルのアクティブ化の前であるかどうか、私の心に疑いを残します。私は後に疑問に思っています。あるいは、どうすれば適切に設定できますか?MavenProject

プロファイルアクティベーションのカスタマイズがリモートでも可能かどうかを教えてもらえますか?

答えて

1

あなただけのプロファイルの下の設定をプラグインに移動する必要があります。

<profiles> 
    <profile> 
     <id>RedHat6x</id> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0-beta-1</version> 
      <dependencies> 
      <dependency> 
       <groupId>org.example</groupId> 
       <artifactId>maven-enforcer-rule-redhat6x</artifactId> 
       <version>1.0</version> 
      </dependency> 
      </dependencies> 
      <configuration> 
      <rules> 
       <redhat6x implementation="org.example.enforcer.Redhat6x"> 
       <compatible>true</compatible> 
       </redhat6x> 
      </rules> 
      </configuration> 
      <executions> 
      <execution> 
       <id>redhat-enforce</id> 
      </execution> 
      </executions> 
      <goals> 
      <goal>enforce</goal> 
      </goals> 
     </plugin> 
     </plugins> 
    </profile> 
</profiles> 
+0

私はあなたが理解してかはわかりません。これを行うと、プロファイルを有効にした後にエンフォーサルールを設定しませんか?ルールを活性化判定ルールにしたい。それでも、私はそれをテストします。 –

+0

プラグインを動作させるには、ビルドタグをその周りに投げなければなりませんでした。私が疑ったように、それはプロファイルをアクティブにしません。 'mvn help:active-profiles'は「アクティブなプロファイルがありません」を返します。 –

+0

私は...残念ながら、特定のプロファイルを有効にする唯一の方法は、システムまたは環境のプロパティに基づいています。それらのプロパティーはいずれのプラグインでも設定できません。したがって、mvnコマンド行で-Dフラグを使用するか、システムの環境変数の1つで設定したものだけに頼ることができます。 http://www.sonatype.com/books/mvnref-book/reference/profiles-sect-activation.htmlを参照してください。 –

関連する問題