从Gradle运行Ant脚本

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

Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found. 

而且我宁愿使用来自本地库的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已经在mt lib文件夹中,我不知道我要改变什么。 我不想使用maven repo。

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

没有网络连接的gradle运行可能不是一个好主意。 然而,如果你在本地目录中有你需要的jar,只需使用文件依赖项将id添加到脚本依赖项。 请参阅:Opal​​的http://www.gradle.org/docs/current/userguide/dependency_management.html#file-dependencies

我修复了以下Gradle错误:

 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添加以下行

  

这是完整的Ant目标test

              

关于“未找到 JUnitTask 的答案对于找到我的上述修复是一个有用的帮助。

找出问题所在

为了理解这个问题,我调整了脚本build.xmlbuild.gradle ,以便比较Ant和Gradle输出。 另请参阅如何使“gradle”具有与“ant”类似的输出细节的答案 一些细节。

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

使用Ant

 /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 

使用Gradle

 /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 

区别

我们可以观察到Gradle使用自己的ant-launcher-1.9.6.jarant-1.9.6.jar 。 但Gradle不使用Ant安装的JAR( /usr/share/ant/lib/*jar/usr/share/java/*jar符号链接)。

长期

在关于Ant JUnit taskdef集成的讨论中 ,Luke Daley在Novembre 2013中证实了这一点。

Gradle使用自己的ant实例,并且不会使用$ANT_HOME安装的内容

在关于JUnit 5的讨论中, Eric Wendelin表达了在Gradle核心中集成更多JUnit的优先级。

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