web-dev-qa-db-ja.com

AntビルドをMavenでラップする方法は?

大きめの商品にはmavenを使用しています。すべてのアーティファクトは、mavenデプロイ目標を使用して、共有アーカイブリポジトリにデプロイされます。現在、antビルドを含むサードパーティ製品を統合しています。私はantrunプラグインを使用してmavenからantターゲットを呼び出す方法を知っていますが、このインスタンスでpomを設定する方法がわかりません。 Mavenが実際にアーティファクトを生成するのは望ましくありませんが、Mavenのデプロイ目標の実行時にantによって作成されたアーティファクトをプルしたいのです。

私はpomをbuild.xmlに隣接させることを計画しています。 pomは、パッケージ目標のantrunプラグインを使用して、適切なタイミングでantターゲットを呼び出し、.warアーティファクトをビルドします。

質問:

a).warファイルを作成していますが、Mavenではなくantを介して作成されているため、pomにwarパッケージタイプを指定しても意味がありません。私のパッケージタイプはどうあるべきですか?

b)どのようにして、Mavenがデプロイ目標のant出力ディレクトリからアーティファクトをプルするのですか?

c)AとBに対する適切な回答がない場合、.warアーティファクトを共有リポジトリに取得するためのMavenデプロイ機能を複製するAntタスクはありますか?

39
digitaljoel

maven-antrun-plugin を使用してAntビルドを呼び出すことができます。次に build-helper-maven-plugin を使用して、antによって生成されたjarをプロジェクトに接続します。添付されたアーティファクトは、pomと共にインストール/デプロイされます。
_pomを使用してプロジェクトを指定した場合、MavenはAntビルドと競合しません。

以下の例では、ant build.xmlはsrc/main/antにあり、compileゴールを持ち、ant-output.jarに出力されると想定されています。

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <phase>process-resources</phase>
      <configuration>
        <tasks>
          <ant antfile="src/main/ant/build.xml" target="compile"/>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>add-jar</id>
      <phase>package</phase>
      <goals>
        <goal>attach-artifact</goal>
      </goals>
      <configuration>
        <artifacts>
          <artifact>
            <file>${project.build.directory}/ant-output.jar</file>
            <type>jar</type>
          </artifact>
        </artifacts>
      </configuration>
    </execution>
  </executions>
</plugin>
52
Rich Seller

実際にANTプロジェクトをMavenでラップするには、別の質問で書いたように multiple ant run Goals を使用します。既存のAntプロジェクトにクリーンタスクとビルドタスクがあると想定すると、これはプロジェクトをラップして、Mavenの目標を使用して既存のAntコードにマッピングできる便利な方法になる場合があります。

3
sal
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.3.1</version>
    <executions>
        <execution>
            <id>install-library</id>
            <phase>install</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>x.x</groupId>
                <artifactId>ant-out-atifacts</artifactId>
                <version>${project.version}</version>
                <file>ant-output.jar</file>
                <packaging>Zip</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>
1
keats

これを参照してください: MavenまたはIvyの代わりにMaven Antタスクを使用する理由

具体的には、AntからMavenゴールを呼び出す方法を次の例に示します。

http://code.google.com/p/perfbench/source/browse/trunk/perfbench/grails-gorm/build.xml

上記の情報を使用すると、必要なことを達成できるはずです。ご不明な点がありましたらお知らせください。

0
Peter Thomas