1

私は現在、Ant から Maven に移行されたかなり大規模なプロジェクトに取り組んでいます。実際のビルド プロセスに問題はありません (ソース コードを適切にコンパイルおよびパッケージ化します)。

問題は、プロジェクトの追加リソースを生成するターゲットもたくさんあることです (LessCSS のコンパイル、ドキュメントの生成とアップロード、tldカスタム タグと関数のファイルの生成など)。これらのタスクをどのように処理すればよいかわかりません。例として、CSS&JS をビルドするターゲットを見てみましょう (他のものは多かれ少なかれ似ていますが、接続されていません)。次のようになります (簡略化)。

<target name="build.css_js">
    <concat destfile="${webapp.dir}/scripts/main.js">
        <fileset dir="${webapp.dir}/scripts/src" includes="*.js"/>
    </concat>

    <!-- build css files from less sources -->
    <taskdef name="lesscss" classname="com.asual.lesscss.LessEngineTask" classpathref="libraries" />
    <lesscss input="${webapp.dir}/syles/src/input.less" output="${webapp.dir}/styles/output.css" />
</target>

ではpom.xml、次のプラグインをセットアップしています。

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <configuration>
               <tasks>
                   <echo message="Hello World from pom.xml"/>
                   <ant target="build.css_js"/>
               </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

私が使用している依存関係は、SVN リポジトリにはもうありません (Maven によって管理されているため)。そのため、ライブラリ変数を Maven リポジトリを指すように切り替えました。

<property name="lib.dir" location="${env.HOMEPATH}/.m2/repository" />

そのパスは私のマシンでのみ有効な場合があるため、これは良くありません。Maven リポジトリからライブラリを参照する他の方法がわかりません。Ant ターゲットを実行するためにそれらが必要です。

  • 私のアプローチは大丈夫ですか、それとも物事を行うためのより良い方法はありますか?
  • ライブラリの問題を解決するにはどうすればよいですか?
  • プロジェクトをパッケージ化するときに必要なリソースと、そうでないリソースがあります。コンパイル/パッケージの範囲外のライフサイクル フェーズはありますか? site自分のニーズに合ったライフサイクルを見つけました。
  • 理想的には、ant ビルド ファイルを完全に放棄する必要がありますが、スクリプトを Maven プラグインとして実行する努力に見合う価値があるかどうかはわかりません (現在、その方法がわかりません)。これについてあなたはどう思いますか?

私はMavenを初めて使用するので、提案をいただければ幸いです。

4

1 に答える 1

1

一般に、antrun 呼び出しを埋め込むことは理想的ではありませんが、必要なことを行うのに適切なプラグインが見つからない場合でも、心配する必要はありません。処理が非常に単純な場合、Maven プラグインに自分で埋め込むのは実際には非常に簡単です。この例を参考にしてください。

antrun を使用していて、依存関係の jar が既に Maven リポジトリにインストールされている場合は、それらの jar をプラグイン構成の依存関係として追加することで、実行時にそれらの jar を使用するように antrun プラグインを構成できます。これは、依存関係が解決されて使用可能になることを意味しますが、プロジェクトには表示されません (誤って含めることを避けるのに役立ちます)。次に、ポータブルな方法でそれらにアクセスするには、次を使用できます。

<property name="lib.dir" location="${settings.localRepository}" />

または、Maven クラスパスを antrun プラグインに公開するために使用可能な他のプロパティのいくつかを使用することもできます。詳細${maven.compile.classpath}については、antrun のドキュメントを参照してください。

ant の個別の実行が複数ある場合は、antrun プラグインで個別に構成し、idそれぞれに適したものを指定できます。以下の例は、2 つの実行を示しています。どちらもプロセス リソース フェーズにバインドされています。もちろん、いくつかの実際の目標を提供する必要があります。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>build-css</id>
      <phase>generate-resource</phase>
      <configuration>
        <target>
          ...
        </target>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
    <execution>
      <id>build-js</id>
      <phase>generate-resource</phase>
      <configuration>
        <target>
          ...
        </target>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>some.group.id</groupId>
      <artifactId>artifactId</artifactId>
      <version>1.4.1</version>
    </dependency>
    <dependency>
      <groupId>another.group.id</groupId>
      <artifactId>anotherId</artifactId>
      <version>1.0.1</version>
    </dependency>
  </dependencies>

于 2011-06-02T17:51:20.690 に答える