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 无法看到我想要的类路径的原因是什么?

我是否正确使用了 artifact:dependencies 生成的 filesetId?

我的 ant 项目 defn
我将 maven-ant-tasks-2.1.3.jar 放在项目 basedir 中。

<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" />

进一步澄清

问题的要点是......如何在我的 Ant javac 任务中使用我的 pom 依赖项?

4

1 回答 1

1

想回答我自己的问题说

我的蚂蚁目标和定义是正确的。正确引用了对人工制品依赖项的 refid。

但是,在 pom.xml 中定义了一些系统范围依赖项。

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 回答