0

私のプロジェクトはMavenを使用して構築されました。私はMavenでそれを楽しく構築していました。今、私はそれをAntで構築する必要があります(私はそれが必要ないことを望みます!!!)。既存のMaven依存関係を使用したい-つまり、依存関係管理のためにpomを保持したい。

だから、私はこのタスクを書きました:

<target name="java.compile">
  <artifact:pom id="mypom" file="pom.xml" />
  <artifact:dependencies filesetId="mypomdeps" pomRefId="mypom" />

  <mkdir dir="build/classes" />

  <javac
    srcdir="${src.java.dir}"
    destdir="build/classes"
    includeantruntime="no">

    <classpath>
      <fileset refid="mypomdeps"/>
    </classpath>

  </javac>
</target>

ただし、antコンパイル出力は、mypomdepsが指すライブラリ(jar内)が欠落していると文句を言います。

javacが意図したクラスパスを認識できなかった理由は何ですか?

アーティファクト:依存関係によって生成されたfilesetIdを正しく使用していますか?

私のantプロジェクトdefn
プロジェクトbasedirにmaven-ant-tasks-2.1.3.jarを配置しました。

<project name="why-does-the-sun-go-on-shining"
  default="java.compile"
  xmlns:artifact="antlib:org.apache.maven.artifact.ant">

  <path id="maven-ant-tasks.classpath" path="maven-ant-tasks-2.1.3.jar" />
  <typedef
    resource="org/apache/maven/artifact/ant/antlib.xml"
    uri="antlib:org.apache.maven.artifact.ant"
    classpathref="maven-ant-tasks.classpath" />

さらなる解明

質問の要点は...Antjavacタスクでpom依存関係を使用する方法は?

4

1 に答える 1

1

私自身の質問に答えたいと思います

私のアリのターゲットと定義は正しかった。アーティファクトの依存関係へのrefidは適切に参照されます。

ただし、pomで定義されたシステムスコープの依存関係がいくつかありました。

antlib:org.apache.maven.artifact.antは、システムスコープの推移的な依存関係を解決しませんでした。例えば、

<dependencies>
  <dependency>
    <groupId>sun.jdk</groupId>
    <artifactId>tools</artifactId>
    <version>LATEST</version>
    <scope>system</scope>
    <systemPath>${java.home}/../lib/tools.jar</systemPath>
  </dependency>
</dependencies>

Oersがecho要素を発行してantスクリプトをデバッグしてくれたことに感謝します。

于 2012-10-12T22:51:24.983 に答える