26

Mavenでは、次の構文を使用してpomにプロパティを設定するのは非常に簡単です。

...
<properties>
  <myValue>4.06.17.6</myValue>
 </properties>
...

次に、pomのバージョンに依存するプロパティを作成する必要があります。プロパティを作成するために、私は次のことを行いたい(java疑似コード):

String[] parts = version.split("\\.");
String.format("V%s_%s_%s_P%s", splitted[0],  splitted[1],splitted[2],splitted[3]);
// example: 4.06.17.6 => V_4_06_17_P6

リポジトリでタグ名として使用され、アーティファクトのバージョンと常に同期している必要があるため、動的である必要があります。

その「動的」プロパティを作成する方法はありますか?

4

3 に答える 3

39

ここでは、Mojo の Build-Helper Maven Plugin が役立ちます。

プロパティの変換を支援するために使用できる多くの目標があります。

がある

おそらくregex-propertyはあなたが望むものですが、バージョン番号が「標準」に準拠している場合、他の2つはあなたを救うかもしれません.

regex-propertyゴールを使用するには、次のようにします。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>regex-property</id>
            <goals>
              <goal>regex-property</goal>
            </goals>
            <configuration>
              <name>tag.version</name>
              <value>${project.version}</value>
              <regex>^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.(-SNAPSHOT)?$</regex>
              <replacement>V$1_$2_$3_P$4</replacement>
              <failIfNoMatch>true</failIfNoMatch>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

注: 私の正規表現は少しずれている可能性があるため、上記をテストする必要があります。

注: プロパティ値は、この実行がバインドされているフェーズ以降の実行でのみ使用できます。バインドされているデフォルトのフェーズはvalidateですが、別のライフサイクル (サイトのライフサイクルなど) にいる場合、値は使用できません。

于 2012-08-17T08:29:15.440 に答える
5

maven build-helper プラグイン、特にそのregex-property mojoを使用できます。使用例を見てみましょう(値セクションに正規表現置換を適用してプロパティを設定するまでスクロールします)。

基本的に、 pom でそのようなものが必要であり、myVersionTagからプロパティを推測しmyValueます:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>regex-property</id>
            <goals>
              <goal>regex-property</goal>
            </goals>
            <configuration>
              <name>myVersionTag</name>
              <value>$\{myValue}</value>
              <regex>(\d+)\.(\d+)\.(\d+)\.(\d+)</regex>
              <replacement>V_$1_$2_$3_P$4</replacement>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
于 2012-08-17T08:27:53.393 に答える