2012-10-01 7 views
8

ウェブアプリケーションをデプロイするときUIリソースのいくつかの変数を更新し、いくつかのアセットを解凍し、いくつかのファイルを連結する必要があります。現在のところ、これはantタスクによって実現されています。私は上記のファイルがまだターゲットディレクトリにコピーされていないので、失敗し戦争がパッケージ化される前に、mavenビルドフェーズでantタスクを実行しますか?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>prepare-package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

...このようなものを使用してMavenのビルドプロセスでこのタスクを実行しようとしています。フェーズを "package"に設定すると、antタスクが正常に実行され、すべてのファイルが作成/修正されますが、antターゲットが実行される前に.warが既にビルドされているので役立ちません。

基本的に、私は準備パッケージフェーズの終わり近くで自分のantターゲットを実行する必要があります。

私は、より細かい目標をantrunプラグインに公開する方法を練習することはできません.

アイデア?

+0

代わりに「純粋な」メイヴンプラグインを使用して、これらのAntタスクを実行することについて考えましたか? – maba

答えて

17

私のコメントには何の答えも得られなかったので、あなたはmaven-antrun-pluginを使い続けたいと思っています。

私が学んだことから、2つのプラグインを同じフェーズで実行すると、pom.xmlで宣言されている順序で実行されます。

これを機能させるには、maven-antrun-pluginの後に<plugins/>のリストにmaven-war-pluginを追加する必要があります。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <!-- First step is to disable the default-war build step. --> 
      <id>default-war</id> 
      <phase>none</phase> 
     </execution> 
     <execution> 
      <!-- Second step is to create an exploded war. Done in prepare-package --> 
      <id>war-exploded</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>exploded</goal> 
      </goals> 
     </execution> 
     <execution> 
      <!-- Last step is to make sure that the war is built in the package phase --> 
      <id>custom-war</id> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

追加default-warが無効になって最初であること、そして戦争が爆発して、最後に戦争がパッケージ化されているので、いくつかのより多くの実行。

+3

これは私の問題の非常に有益な答えでした。しかし、私は少し異なったセットアップ:exploded(prepare-package) - > copy-resources(prepare-package) - > war(package)を持っていました。 war:explodeタスクの上書きを上書きしないために、war :: warの実行のために ' 'を空のディレクトリに指定しなければなりませんでした。 – omilke

1

これは、ライフサイクルで必要な粒度が得られない場所です。私は前に誰かのためにsimilar questionに答えました。これはあなたの質問に対する正確な答えではありませんが、そのテクニックが適用されるかもしれません。

関連する問題