2

いくつかのリソース セットを組み立てる必要があります。これらのリソースのセットは互いに関連しています。そこで、それらをすべて同じプロジェクトの下に置き、アセンブリ プラグインを使用して目標を達成することにしました。

リソースのセットごとに POM と記述子ファイルを作成しました。

私のプロジェクトが次のようになっているとしましょう:

  • src/main/resources/set1 : 最初のセットのリソースが含まれています
  • src/main/resources/set2 : 2 番目のセットのリソースが含まれています
  • src/main/resources/set3 : 3 番目のセットのリソースが含まれています
  • descriptor1.xml : 最初のセットのアセンブリ記述子
  • descriptor2.xml : 2 番目のセットのアセンブリ記述子
  • descriptor3.xml : サード セットのアセンブリ記述子
  • pom.xml

descriptor1.xml の内容は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
      http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
      http://maven.apache.org/xsd/assembly-1.1.2.xsd">

    <id>set1</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <outputDirectory>/</outputDirectory>
            <directory>${project.basedir}/src/main/resources/set1</directory>
        </fileSet>
    </fileSets>
</assembly>

descriptor2.xml と descriptor3.xml の内容は、set1 ("/assembly/id" と "/assembly/fieldSets/fieldSet/directory" 内) がそれぞれ set2 と set3 に置き換えられていることを除いて、descriptor1.xml の内容と似ています。

pom.xml の内容は次のとおりです。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>sample</groupId>
    <artifactId>sample.assembler</artifactId>
    <version>0.0.1</version>
    <packaging>pom</packaging>

    <properties>
        <maven-assembly-plugin.version>2.4</maven-assembly-plugin.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>${maven-assembly-plugin.version}</version>
                <executions>
                    <execution>
                        <id>set1</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>descriptor1.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                    <execution>
                        <id>set2</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>descriptor2.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                    <execution>
                        <id>set3</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>descriptor3.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

上記の構成により、期待される結果が得られます。ただし、維持する記述子ファイルは多数あります。

記述子ファイルは、使用される前にプロジェクト プロパティ、POM 要素値、ユーザー プロパティなどを使用して補間されるというドキュメントを読みました。

私の質問は: 現在の実行の ID (project.build.execution.id のようなもの) を参照する方法はありますか? このような場合、私の 3 つの記述子はすべて 1 つのファイルに置き換えられます。

前もって感謝します。

4

1 に答える 1

1

1回の実行で目的を達成できるとは思いません。

ただし、プロファイルの最初の部分が異なるプロパティを定義するプロファイルを作成し、異なるプロファイルを使用してビルドを 3 回実行して、3 つの異なるファイル セットを取得することができます。

私は、さまざまな環境の構成を生成するためにこのようなアプローチを使用しています。環境プロファイルをアクティブにすると、出力は環境構成になります。構成は、プロファイル プロパティによって駆動される単一の記述子によって生成されます。

編集:

問題を解決する可能性のある実行ごとのプロパティを使用した回避策を次に示します。現時点では、これらのフィルターがリソースのフィルター処理のみに使用されるのか、定義のためにアセンブリ自体でそれらを参照できるのかは完全にはわかりません<finalName>...

参照: http://olafsblog.sysbsb.de/per-assembly-filtering-with-the-maven-assembly-plugin/

于 2013-09-27T20:06:41.607 に答える