当前位置: 首页 > 知识库问答 >
问题:

Ant——如何在javac任务的类路径中使用文件集id?

昌栋
2023-03-14

我的项目是用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指向的库(在jars中)丢失了。

javac无法看到我想要的类路径的原因是什么?

我是否正确使用了由工件:依赖项生成的filesetId?

我的ant项目defn:
我放置了maven-ant-tasks-2.1.3。项目basedir中的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" />

进一步澄清

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

共有1个答案

钱浩荡
2023-03-14

想回答我自己的问题

我的ant目标和定义是正确的。refid到artetify依赖关系被正确引用。

然而,pom中定义了一些系统范围依赖项。

antlib:org。阿帕奇。专家人工制品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脚本。

 类似资料:
  • 有人举过一个使用JDK 6风格的例子吗?只定义目录,而不是目录中每个jar的列表。类路径有ANT javac编译任务吗? 我们这样试过了 编写classpath=c:。。。。\WEB-INF\lib*;。。。websphere。。。\a、 罐子;。。。websphere。。。\b、 罐子;等,并在javac任务中使用了这个类路径,但WEB-INF\lib中的库没有被识别。 所以,我想知道是否有可能

  • Ant Javac任务用于编译Java源文件。 它扫描源和目标目录以编译源文件,只在不存在或比Java文件旧时才编译。 如果Java源文件位于任何包中,则源文件应具有目录层次结构。 1. Apache Ant Javac属性 属性 描述 必需 源Java文件 是 存储类文件的目标 否 必须包含的文件模式列表 否 文件的每一行都被视为包含模式 否 必须排除的文件模式列表 否 文件的每一行都被视为排除

  • 问题内容: 我的build.xml中包含以下内容: 这主要完成了我想要的操作,只是(如评论所述)我 不 希望 该任务编译其中的文件(但我确实希望该任务下的 所有其他内容都编译)。 我是一个完整的ant n00b蚂蚁,该文档对我没有太大帮助。我在几个地方看到它说有各种各样的排除/排除元素/属性,但是我能想到的每一种变化都没有效果,或者导致诸如“ 等等 不支持’排除’属性”之类的错误。 问题答案: 几

  • 问题内容: 我有一个在命令行上可以正常工作的Ant 文件:它可以编译,构建JAR,并且可以从JAR执行main方法。该文件引用了分散在各处的几个第三方库。在构建JAR时,脚本不会将所有第三方库都包含在JAR本身中。相反,它将它们的路径放入JAR的清单中。这有助于使我的JAR保持整洁。 我希望能够在Eclipse中编辑和调试我的项目,但是我找不到一种简便的方法。我可以让我的项目使用Ant文件来构建项

  • 问题内容: 我面临一个问题。我在机器上重命名,并注意到任务仍然可以正常工作。 有人知道从哪里获取吗? 问题答案: 实际上,我相信默认情况下,Ant会尝试直接使用以下代码执行Java编译器类: 代码来自这里 。 这意味着,如果库tools.jar位于Ant的当前类路径上,它将拾取该类并启动它。这导致javac.exe可以重命名为您想要的任何名称,它仍然可以工作。因此,要回答您的问题,它实际上不执行任

  • 16.1.使用 Ant 任务和 Ant 类型的构建 在构建脚本中, Ant 属性是由 Gradle提供的. 这是一个用于参考的 AntBuilder 实例. AntBuilder 用于从构建脚本访问 Ant 任务, 类型和属性. 下面的例子解释了从 Ant 的 build.xml 格式到 Grooy 的映射. 你可以通过调用 AntBuilder 实例的方法执行 Ant 任务. 你可以使用任务名称