1

私はantをmaven2に変換しています。build.xml には、次のものがあります。

<target name="clean">
  <delete file="${dir.dist}/${api.jarfile}" />
  <delete dir="${dir.build}/**" />
</target>
<target name="prepare1" depends="clean">
  <mkdir dir="${dir.build}" />
  <mkdir dir="${dir.generated.code.junit}/build" />
  <mkdir dir="${dir.dist}" />
</target>
<target name="prepare2" depends="clean">
  <mkdir dir="${dir.deploy}" />
  <mkdir dir="${dir.dist}" />
</target>

最初のターゲットで正常に動作する maven-antrun-plugin を使用しています。ただし、2 番目のターゲットについては、antrun は「依存」をサポートしていません。次のようなトリックを実行できます。最初のターゲットをクリーン フェーズに置き、2 番目のターゲットをポスト クリーン フェーズにします。したがって、2 番目のターゲットは最初のターゲットの後に実行されます。しかし、3 番目のターゲットの場合、3 番目のターゲットは 1 番目のターゲットの後にのみ実行する必要があるため、このトリックは機能しません (3 番目の実行時に 2 番目のターゲットを実行したくありません)。

とにかく、私の build.xml は多くのターゲットを含む大きなファイルであり、それらの関係が複雑であるため、このトリックは機能しません。

とにかくこれを修正できるものはありますか?あるタスクを別のタスクに依存させるものはmavenにありますか?

4

1 に答える 1

1

a) 一緒に放り込んでみませんか? Maven で ant を実行する場合、とにかく個々のターゲットを呼び出すことはできません。Ant の実行を Maven フェーズにバインドしています。したがって、クリーンフェーズで次のことができます。

  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.4</version>
    <executions>
      <execution>
        <phase>clean</phase>
        <configuration>
          <tasks>
             <delete file="${dir.dist}/${api.jarfile}" />
             <delete dir="${dir.build}/**" />
             <mkdir dir="${dir.build}" />
             <mkdir dir="${dir.generated.code.junit}/build" />
             <mkdir dir="${dir.dist}" />
             <mkdir dir="${dir.deploy}" />
             <mkdir dir="${dir.dist}" />
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

他のフェーズでさらに作業が必要な場合は、さらに実行を追加します。

      </execution> <!-- end tag from above -->
      <execution>
        <phase>generate-sources</phase>
        <configuration>
          <tasks>
               <!-- some more ant tasks -->
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>

b) Maven を使用する場合は、Maven のように考える必要があります。Ant タスクで行っていることの多くは、デフォルトの Maven の動作です。

clean フェーズでは、clean:cleanゴールが実行され、ターゲット ディレクトリ (およびそれに伴う jar ファイル) が削除されます。使用しているすべてのディレクトリをターゲットの下に配置すると (これは Maven での推奨事項と見なされます)、maven はそれらを自動的に削除 (および作成) します。

Maven は規約に関するものです。

  • 生成されたものはすべてターゲット内に入ります
  • メイン アーティファクトのクラスとリソースは、ターゲット/クラス内に配置されます
  • テスト用のクラスとリソースは、ターゲット/テスト クラス内に移動します
  • 生成されたリソースは target/generated-resources/yourfoldername 内に移動します
  • 生成されたソースは target/generated-sources/yourfoldername 内に移動します

すべての主要なプラグインは、これらの規則に従うことを期待しており (それらにはデフォルトが設定されています)、それらを使用すると Maven の作業が非常に簡単になります。

たとえばmvn clean、生成されたものすべてを確実に削除します。いくつかの例外があります。プラグインはデータを別の場所に保存する必要があるため、clean:clean で取得することはできません。これらのプラグインは通常、代わりのクリーンなモジョ ( eclipse:cleanidea:cleanがその例です) を提供しますが、それ以上の例外を作成しないようにしてください。

また、maven の慣習によれば、フェーズ クリーンでは何も作成しないでください。、 、、などgenerate-resources、ものを生成するフェーズはたくさんあります。また、フォルダーの作成は通常不要です。私が知っているすべてのmavenプラグインは、ファイルを書き込むときに必要に応じてフォルダーを作成します。generate-sourcesgenerate-test-resourcesgenerate-test-sources

于 2010-07-30T08:49:56.170 に答える