2016-09-28 7 views
2

私はMavenを使用してコンパイルされたJavaプロジェクトを持っています。最後に、コンパイル済みのJARファイル、DLLなどを10個のZIPファイルにパックするためにmaven-assembly-pluginが使用されています。すべてのZIPファイルは異なる環境(DLLが異なる)用ですが、その内容はほぼ同じです。Maven Assembly Pluginのカスタムプロパティを取得するにはどうすればいいですか?

ここでは、10個のZIPファイルを作成するために使用される10個の異なるassembly.xmlファイルを使用します。

これらのXMLはほとんど同じですが、唯一の違いはDLLの1ワードのパスです。このようなファイルの例:(現実にはそれがはるかに長いです)

<assembly> 
    <id>{someVariable}</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <!-- Copying DLLs: --> 
    <fileSet> 
     <directory>target/dll/{someVariable}</directory> 
     <outputDirectory>dll</outputDirectory> 
     <includes> 
      <include>*.dll</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

あなたが見ることができるように、私は望ましい機能ですが、私はそれを動作させることができないより多くの場所に{someVariable}を使用したいと思います。うまくいけばそれが可能で、これは私の質問の中核です。

<plugin> 
<artifactId>maven-assembly-plugin</artifactId> 
<executions> 
    <execution> 
     <id>make-the-zip</id> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <phase>package</phase> 
     <configuration> 
      <descriptors> 
       <descriptor>src/assembly/myCommonAssembly.xml</descriptor> 
      </descriptors> 
      <properties> 
       <someVariable>my-value</someVariable> 
      </properties> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

はそれが可能です:私は、同じassembly.xmlファイルを使用して、このような{someVariable}の異なる値で10倍、常にそれを実行したいですか? FYI:セクション<properties>は機能しません。私は何をしたいのかを示しています。

私はpoml.xmlでプロパティを作成し、assembly.xmlで使用できますが、10個の異なるassembly.xmlファイルを作成する必要があるため、問題は解決しません。

Thisが私が見つけた最高のアドバイスですが、答えではありません。

+0

ここで見てみることができます:https://github.com/khmarbaise/multienv-maven-plugin? – khmarbaise

答えて

2

iterator-maven-pluginを使用すると、すべての異なるプロパティ値を繰り返し処理できます。このモジョは、指定されたプロパティのセットを反復処理することができますiterator目標を持っており、Mavenのプロパティとしてとしてそれらを追加します。

あなたが使用できることを意味しプロパティとして現在の値を注入しますイテレータのmaven-pluginのこのプロパティはビルドをパラメータ化します。あなたのケースでは

、あなたが持っている可能性があり:package相で

<plugin> 
    <groupId>com.soebes.maven.plugins</groupId> 
    <artifactId>iterator-maven-plugin</artifactId> 
    <version>0.4</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>iterator</goal> 
     </goals> 
     <configuration> 
     <items> 
      <item>my-value-1</item> 
      <item>my-value-2</item> 
      <item>my-value-3</item> 
     </items> 
     <pluginExecutors> 
      <pluginExecutor> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.6</version> 
      </plugin> 
      <goal>single</goal> 
      <configuration> 
       <descriptors> 
       <descriptor>${project.basedir}/src/assembly/myCommonAssembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
      </pluginExecutor> 
     </pluginExecutors> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

を、この構成は、3つの与えられた値よりmy-value-3からmy-value-1を反復し、毎回Mavenのアセンブリのプラグインを実行します。与えられた実行については、現在の反復値を${item}で取り出すことができます。したがって、あなたの一般的なアセンブリ記述子は、次のようになります。

<assembly> 
    <id>${item}</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <!-- Copying DLLs: --> 
    <fileSet> 
     <directory>target/dll/${item}</directory> 
     <outputDirectory>dll</outputDirectory> 
     <includes> 
      <include>*.dll</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 
+0

ありがとう、これは有望そうです。 目標com.soebes.maven.pluginsを実行できませんでした:iterator-maven-plugin:0.4:iterator(デフォルト): 実行時のデフォルトはfalseです。目標com.soebes.maven.plugins:iterator-maven-plugin:0.4:イテレーターが失敗しました: プラグイン 'com.soebes.maven.plugins:iterator-maven-plugin:0.4'にmojo 'iterator'を読み込めませんAPI非互換性: org.codehaus.plexus.component.repository.exception.ComponentLookupException:com/soebes/maven/plugins/iterator/IteratorMojo: サポートされていないmajor.minorバージョン51。0 – Racky

+0

@Racky Ouch。うん、Java 1.3はかなり古いです。私はJava 7または8でこの問題を実行していません。どのバージョンのMavenを使用していますか?プラグインには少なくともMaven 3が必要であり、Maven 3.3には少なくとも1.7が必要です。 – Tunaki

+0

だから今はうまくいくようです。 iterator-maven-pluginのバージョンを0.3に変更しました。ありがとう。 – Racky

関連する問題