2016-12-02 4 views
5

私はpom.xmlで定義されているブール値のプロパティを無効にしたいと思います。pom.xmlのプロパティを否定する方法は?

意味、指定のプロパティ${doSomething}<skip>の値が${doSomething}の値になるように、<skip>をプラグインに渡す必要があります。

${doSomething}がfalseの場合、スキップします。それが真実なら、私はスキップしたくありません。何か案は?

明確化:プロファイルの有効化にプロパティの否定を使用することについては言及していません。ブール値の否定をプラグインに渡したいだけです。

+0

あなたdoSomethingをスキップするために使用している現在のコマンドを共有することができます。 – nullpointer

+0

@nullpointerカスタムプラグインです。 https:// githubの '$ {download.cmake} 'を参照してください。com/cmake-maven-project/cmake-maven-projectにあります。ユーザーがこのプロパティをfalseに設定した場合、ダウンロードをスキップしますが、プラグインは実際にはこの値の否定を入力として受け取ります( ' 'パラメータ)。 – Gili

+0

現在のpom.xmlのプラグインコンテキストと現在実行中の実行方法について、詳細に質問を追加してください。私は提供されたリンクに '$ {download.cmake} 'が表示されません。 – nullpointer

答えて

6

を、Mavenはブール論理が実装されていません。したがって、プラグインに渡すプロパティを無効にしたい場合は、それを自分で行う必要があります。それは少し不器用ですが、Mavenのプロパティとして、それに定義されてBeanShell scriptとエクスポート変数書くことができますbuild-helper-maven-plugin:bsh-property目標、使用することができます:あなたはプロパティをオーバーライドすることはできません

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.12</version> 
    <executions> 
    <execution> 
     <id>negate-prop</id> 
     <phase>initialize</phase> 
     <goals> 
     <goal>bsh-property</goal> 
     </goals> 
     <configuration> 
     <source>dontDoSomething = !${doSomething};</source> 
     <properties> 
      <property>dontDoSomething</property> 
     </properties> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

を、しかし、あなたが定義することができます否定の結果を含む新しいもの。上記の例では、それはdontDoSomethingです。これはinitialize段階で実行され、残りのプラグインでパラメータとして使用することができます。標準は${dontDoSomething}です。

doSomethingが存在しない場合、これをデフォルト値のdontDoSomethingに拡張することができます。

<source> 
    value = project.getProperties().getProperty("doSomething"); 
    dontDoSomething = value == null ? false : !Boolean.parseBoolean(value); 
</source> 

BeanShellは、Javaに非常によく似ていて、既存のJavaメソッドを使用できるスクリプト言語です。上記では、プロパティ"doSomething"がプロジェクトのプロパティから取得されます(projectは評価時にプラグインによって現在のMavenプロジェクトに注入されます)。定義されていない場合は、falseを返します。そうでない場合は、値を無効にします。


doSomethingは、特にシステムプロパティである場合、それはまた、(AB)に可能とすることができるプロフィール活性化機能を使用し、2つのプロファイルを有する:一つの特性によって活性化第二trueであるとfalseに別の設定、および逆をやっプロフィール:

<profiles> 
    <profile> 
    <id>pro-1</id> 
    <activation> 
     <property> 
     <name>doSomething</name> 
     <value>!false</value> 
     </property> 
    </activation> 
    <properties> 
     <dontDoSomething>false</dontDoSomething> 
    </properties> 
    </profile> 
    <profile> 
    <id>pro-2</id> 
    <activation> 
     <property> 
     <name>doSomething</name> 
     <value>false</value> 
     </property> 
    </activation> 
    <properties> 
     <dontDoSomething>true</dontDoSomething> 
    </properties> 
    </profile> 
</profiles> 

doSomethingは、例えば<properties>タグに設定されたMavenのプロパティである場合、これは動作しません。 mvn -DdoSomething=true|falseのシステムプロパティとして渡す必要があります。対応するプロファイルは、システムプロパティの値に応じてアクティブ化され、dontDoSomethingプロパティを逆に定義します。プロパティが定義されていない場合はがアクティブになり、dontDoSomethingをデフォルト値のfalseに設定します。しかし、このすべてはかなり醜いです...

+1

答えを更新して、2つのプロファイルを使用してブール値をtrueまたはfalseに設定するより完全な例を含めることができますか? – Gili

+1

@ギリーはい、私はちょうど編集しました。 'doSomething'がMavenプロパティだけでなくシステムプロパティである場合にのみ機能することに注意してください。 – Tunaki

+0

それは大丈夫です(しかし、これを指摘してくれてありがとう!) – Gili

1

正確な答えはわかりませんが、次のようにプロパティの値を逆にすることができます(http://maven.apache.org/guides/introduction/introduction-to-profiles.html)。あなたが最初のプロパティの値を反転させ、別のプロパティを宣言:

別にプロファイルの活性化から
<property> 
    <name>dontDoSomething</name> 
    <value>!${doSomething}</value> 
</property> 
+0

ここでプロファイルの有効化については話していないので、これは機能しません。私たちは、プラグインに渡されるプロパティを定義することを話しています。 – Gili

+0

それは何が、どれほどかについてではありません。あなたはどのように財産の価値を逆転させますか? – actc

+0

ああ。申し訳ありませんが、私は今それを試してみましょう。 – Gili

関連する問題