web-dev-qa-db-ja.com

カスタムMaven 2プロパティのデフォルト値の設定

コマンドラインで制御できるようにするプラグインを含むMaven pom.xmlがあります。それ以外の場合はすべて正常に機能しますが、しばらくの間ネットを検索した後でも、コントロールプロパティのデフォルト値を設定する方法がわかりません。

<plugin>
    ...
    <configuration>
        <param>${myProperty}</param>
    </configuration>
    ...
</plugin>

Mavenを実行すると

mvn -DmyProperty=something ...

すべては問題ありませんが、-DmyProperty=...スイッチを使用せずにmyPropertyに特定の値を割り当てたいです。これをどのように行うことができますか?

60
Eemeli Kantola

プロパティのデフォルト値は、<build>/<properties>または以下に示すようなプロファイルで定義できます。コマンドラインで-DmyProperty=anotherValueを使用してプロパティ値を指定すると、POMからの定義がオーバーライドされます。つまり、all POMのプロパティ値の定義には、プロパティのdefault値のみが設定されます。

<profile>
    ...
    <properties>
        <myProperty>defaultValue</myProperty>            
    </properties>
    ...
       <configuration>
          <param>${myProperty}</param>
       </configuration>
    ...
</profile>
63
akostadinov

テイラーLのアプローチはうまく機能しますが、余分なプロファイルは必要ありません。 POMファイルでプロパティ値を宣言するだけです。

<project>
  ...
  <properties>
    <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. 
         Executions of the plug-in should append the container name and version to this path. 
         E.g. Apache-Tomcat-5.5.20 --> 
    <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> 
  </properties> 
</project>

各ユーザーが独自のデフォルトを設定できるようにする場合は、ユーザーsettings.xmlファイルでプロパティを設定することもできます。このアプローチを使用して、CIサーバーが通常の開発者の一部のプラグインに使用する資格情報を非表示にします。

36
DavidValeri

以下のようなものを使用できます。

<profile>
    <id>default</id>
    <properties>
        <env>default</env>
        <myProperty>someValue</myProperty>            
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>
26
Taylor Leese

@akostadinovのソリューションは、一般的な使用に最適です...しかし、依存関係の解決フェーズ(mvn pom階層処理の非常に早い段階)でリアクターコンポーネントが目的のプロパティを使用する場合は、プロファイル「none activationオプションのコマンドラインで提供される値がpom.xml内で提供される値に関して常に優先されることを確認するテストメカニズム。そして、これがあなたのPOM階層です。

これを行うには、親pom.xmlに次の種類のプロファイルを追加します。

 <profiles>
    <profile>
      <id>my.property</id>
      <activation>
        <property>
          <name>!my.property</name>
        </property>
      </activation>
      <properties>
        <my.property>${an.other.property} or a_static_value</my.property>
      </properties>
    </profile>
  </profiles>
4
Franck Bonin

これはあなたのために働くかもしれません:

<profiles>
  <profile>
    <id>default</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <build>
     <plugin>
       <configuration>
        <param>Foo</param>
       </configuration>
     </plugin>
    </build>
    ...
  </profile>
  <profile>
    <id>notdefault</id>
    ...
     <build>
      <plugin>
        <configuration>
            <param>${myProperty}</param>
        </configuration>
     </plugin>
     </build>
    ...
  </profile>
</profiles>

そうすれば、

mvn cleanは、デフォルトのパラメーターとして「foo」を使用します。オーバーライドする必要がある場合は、mvn -P notdefault -DmyProperty=somethingを使用します

1
sal