0

Maven を使用する場合、ビルド タスクを管理するための一般的なアプローチは何ですか? 私は現在、依存関係の管理に Maven を使用していますが、Ant や Rake が提供するものと同様に、ライフサイクルとは無関係にいつでも実行できるいくつかの「タスク」を定義する必要があります。名前で呼び出されるたびに一連のステップを実行する単純な「関数」です。

たとえば、1 つの「タスク」はjar、ユーザー提供のフォルダーからファイルを取得し、コマンドを使用して私の Maven モジュールの 1 つに関連付けられたローカルの Maven リポジトリーにインストールし、mvn install:install-file -DlocalRepositoryPath=repoそのモジュールの pom.xml を新しいものを指すように変更することです。 jar のバージョン。このタスクはライフサイクルとは関係ありません。特定のことを行う一般的なタスクであるため、手動で実行する必要はありませんmvn task:update-jar

もう 1 つの例は、Maven モジュールの 1 つ内のディレクトリの内容を削除し、ユーザー提供のディレクトリから空のディレクトリに内容をコピーする「タスク」です。繰り返しますが、このタスクは Maven や依存関係とは何の関係もありませんが、常に手動で行う必要はありません。

人々はこれらのタスクをどのように記述しますか? これはよくある問題に違いありません。Mavenがプラグインを提供してantrunいることは知っていますが、私が知る限り、それは私が望むものではないMavenライフサイクルフェーズにしかバインドできません。build.xml ファイルを使用して maven 以外に Ant を使用することもできますが、Maven が自分でやりたいことを実行するように構成できるとしたら、それはばかげています。また、プロジェクトを管理するために Maven と Ant の両方を必要とするのは、最適とは言えません。

4

2 に答える 2

1

ビルドがこのように機能することを主張する場合、Maven は適切な選択ではありません。

ただし、単に依存関係の管理が必要な場合は、他の選択肢があります。たとえば、

  1. グラドル
  2. アイビー + アリ

Maven リポジトリを使用した依存関係管理を直接サポートしながら、ビルド スクリプトのフローを完全に制御できます。

于 2014-02-18T22:01:47.883 に答える
0

maven-antrun-plugin http://maven.apache.org/plugins/maven-antrun-plugin/を使用できます

mvn antrun:runそのため、 run が pom.xml で定義した目標であるようなコマンドラインを使用できます

このプラグインを使用すると、「maven-ant」を組み合わせて使用​​し、maven で ant ファイルを呼び出すこともできます。プロジェクトの構成が本当に混乱する可能性があるため、慎重に使用してください。

私のプロジェクトで別のファイルのプロパティを置き換えるために使用される簡単な例

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <!-- #1 : call antrun to merge projet with convinient conf files -->
      <execution>
        <id>replace</id>
        <phase>generate-resources</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <tasks>
            <ant antfile="replace.xml"/>
          </tasks>
        </configuration>
      </execution>
      <!-- #2 : call antrun to explode war created in target directory-->
      <execution>
        <id>unwar</id>
        <phase>install</phase>
        <configuration>
          <tasks>
            <!-- add conf folder (was ignored during war creation) -->
            <copy todir="./target/${project.artifactId}-${project.version}/conf">
              <fileset dir="./conf"/>
            </copy>

            <!-- rebuild war with conf folder newly added -->
            <delete>
                <fileset dir="./target">
                    <include name="${project.artifactId}-${project.version}.war"/>
                </fileset>
            </delete>
            <war basedir="./target/${project.artifactId}-${project.version}" destfile="./target/${project.artifactId}-${project.version}.war" webxml="./target/${project.artifactId}-${project.version}/WEB-INF/web.xml"/> 

            <!-- copy war and exploded webapp-->
            <copy todir="./${project.artifactId}/${project.version}/${project.artifactId}-${project.version}">
                <fileset dir="./target/${project.artifactId}-${project.version}"/>
            </copy>
            <copy file="./target/${project.artifactId}-${project.version}.war" todir="/devef/maven/repository/fr/as/galilei/${project.artifactId}/${project.version}"/>

          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>ant</groupId>
        <artifactId>ant-nodeps</artifactId>
        <version>1.6.5</version>
      </dependency>
    </dependencies>
  </plugin>
于 2014-02-18T17:15:00.637 に答える