7

gitflow-helper-maven-pluginMaven ビルドに拡張機能を使用しようとしています。

したがって、リリース バージョンをビルドするときにいくつかの追加の手順を実行し、SNAPSHOT のコンパイル中にスキップするようにプロジェクトを構成したいと思いますが、${project.version}含まれている場合にプロファイルを有効にする方法が見つかりません-SNAPSHOT

なにか提案を?

4

3 に答える 3

13

ifMavenビルドで常にステートメントをシミュレートする方法である可能なアプローチの下:

  • buid-helper-maven-pluginとそのregex-propertyゴールを使用して、デフォルト プロパティを解析し、値またはサフィックスが見つかった場合に${project.version}新しいプロパティを作成します。${only.when.is.snapshot.used}true${project.version}SNAPSHOT
  • オプションを使用して新しい (動的) プロパティを渡す特別な構成でゴールmaven-source-pluginを実行するように を構成します。スナップショットの場合は値があるため実行をスキップします。この実行jarskipSource${only.when.is.snapshot.used}true${project.version}false
  • maven-javadoc-pluginそのskipオプションを使用して、上記と同じように構成します

上記のアプローチのサンプルは次のようになります。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
        <execution>
            <!-- sets the only.when.is.snapshot.used property to true if SNAPSHOT was used, 
                to the project version otherwise -->
            <id>build-helper-regex-is-snapshot-used</id>
            <phase>validate</phase>
            <goals>
                <goal>regex-property</goal>
            </goals>
            <configuration>
                <name>only.when.is.snapshot.used</name>
                <value>${project.version}</value>
                <regex>.*-SNAPSHOT</regex>
                <replacement>true</replacement>
                <failIfNoMatch>false</failIfNoMatch>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
        <execution>
            <id>create-sources</id>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <!-- skip when version is SNAPSHOT -->
                <skipSource>${only.when.is.snapshot.used}</skipSource>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.10.4</version>
    <executions>
        <execution>
            <id>create-javadoc</id>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <!-- skip when version is SNAPSHOT -->
                <skip>${only.when.is.snapshot.used}</skip>
            </configuration>
        </execution>
    </executions>
</plugin>

つまり、プロファイルは必要ありません。この構成は、SNAPSHOT 以外のバージョンが動的に使用される場合にのみ有効になり、それ以上の構成 (コマンド ライン オプションなど) は必要ありません。


補足として、上記のアプローチの追加の (マイナーな) 複雑さなしでリリースを実行maven-release-pluginする場合にのみ、ソースと javadoc プラグインを効果的に呼び出す を参照することもできます。

それ以外の場合は、 Maven Super POMからのデフォルト プロファイルを簡単に使用できます。これは、実際には同じソースおよび javadoc プラグインを呼び出し、performReleasevalue に設定されたプロパティを介してアクティブ化できますtrue。つまり、任意の Maven プロジェクトで次を呼び出すことができます。

mvn clean package -DperformRelease=true

また

mvn clean package -Prelease-profile

また、デフォルトのスーパー プロファイルを自動的に活用し、ソースと Javadoc jar を生成します。ただし、このアプローチは、将来のリリースでスーパー pom から削除される可能性があるため、最後のオプションとして使用する必要があります。

于 2016-08-25T08:13:04.763 に答える