Java 从Gradle运行Ant脚本

Java 从Gradle运行Ant脚本,java,ant,gradle,Java,Ant,Gradle,我正在尝试从Gradle运行ant脚本,但有一个例外: Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found. 我更愿意使用本地libs中的ant junit,但我不知道如何使用,我对Gradle还很陌生 我找到了这个密码 configurations { antClasspath } dependencies { antClasspath 'org.apa

我正在尝试从Gradle运行ant脚本,但有一个例外:

  Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.
我更愿意使用本地libs中的ant junit,但我不知道如何使用,我对Gradle还很陌生

我找到了这个密码

configurations { 
  antClasspath 
} 
dependencies { 
  antClasspath 'org.apache.ant:ant-junit4:1.8.3' 
} 
ClassLoader antClassLoader = org.apache.tools.ant.Project.class.classLoader 
configurations.antClasspath.each { File f -> 
  antClassLoader.addURL(f.toURI().toURL()) 
} 

但是如果jar已经在mtlib文件夹中,我不知道我必须更改什么。我不想使用maven repo。

这只是从评论中重新发布,解决了我的问题:感谢


在没有网络连接的情况下运行gradle可能不是一个好主意。不过,如果您在本地目录中有所需的jar,只需使用文件依赖项向脚本依赖项添加id即可。请参阅:从Opal中,我已修复了以下渐变错误:

Execution failed for task ':test'.
> Problem: failed to create task or type junit
  Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.
          This looks like one of Ant's optional components.
  Action: Check that the appropriate optional JAR exists in
          -ANT_HOME/lib
          -the IDE Ant configuration dialogs
在我的Ant任务之前,在我的Ant脚本
build.xml
中添加以下行

from为找到我的上述修复提供了有用的帮助

确定问题 为了理解这个问题,我调整了脚本
build.xml
build.gradle
,以便比较Ant和gradle的输出。有关详细信息,请参见

有趣的区别在于
-classpath
参数:

使用蚂蚁 使用渐变 差别 我们可以观察到Gradle使用了自己的
ant-launcher-1.9.6.jar
ant-1.9.6.jar
。但是Gradle没有使用Ant安装的jar(
/usr/share/Ant/lib/*jar
是指向
/usr/share/java/*jar
的符号链接)

长期 年,卢克·戴利于2013年11月确认

Gradle使用自己的ant“实例”,不必使用安装在
$ant_HOME

在本文中,Eric Wendelin表示优先考虑在Gradle core中集成更多JUnit


因此,长期的解决方案是停止使用Ant脚本中的JUnit,并将其转换为Gradle语法。

有什么原因不能使用Gradle来运行JUnit测试吗?我正在运行测试的pc没有internet连接。我不确定脱机工作是如何阻止您使用Gradle的测试任务的。如果您需要一个引用依赖项管理,那么您可以使用Gradle.maven标记was not here在没有网络连接的情况下运行Gradle可能不是一个好主意。不过,如果您在本地目录中有所需的jar,只需使用文件依赖项向脚本依赖项添加id即可。见:
<taskdef name="junit"
  classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"
  classpath="/usr/share/ant/lib/ant-junit.jar:/usr/share/ant/lib/ant-junit4.jar"
/>
<target name="test" depends="test_compile">
  <mkdir dir="${test.report.dir}" />

  <!-- Required for Gradle -->
  <taskdef name="junit"
  classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"
  classpath="/usr/share/ant/lib/ant-junit.jar:/usr/share/ant/lib/ant-junit4.jar"
  />

  <junit printsummary="yes" fork="true" haltonfailure="on">
      <classpath refid="classpath_test"/>
      <batchtest>
          <fileset dir="${test.src.dir}">
              <include name="**/*Tester.java" />
          </fileset>
      </batchtest>
  </junit>
</target>
/some/path/myApplication.jar
/usr/share/java/ant-launcher-1.9.7.jar
/usr/share/ant/lib/ant.jar
/usr/share/ant/lib/junit.jar
/usr/share/ant/lib/ant-junit.jar
/usr/share/ant/lib/ant-junit4.jar
/some/path/myApplication.jar
/usr/lib/gradle/3.2.1/lib/ant-launcher-1.9.6.jar
/usr/lib/gradle/3.2.1/lib/ant-1.9.6.jar