首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Gradle运行Ant脚本

从Gradle运行Ant脚本
EN

Stack Overflow用户
提问于 2014-09-24 00:33:54
回答 2查看 1.8K关注 0票数 2

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

代码语言:javascript
复制
  Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.

我更喜欢使用本地库中的ant-junit,但我不知道如何使用,因为我是Gradle的新手。

我找到了这段代码

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2014-09-24 17:03:10

这是来自评论的转载,它解决了我的问题:感谢Opal

在没有网络连接的情况下运行gradle可能不是一个很好的主意。但是,如果您在本地目录中有所需的jar,只需使用文件依赖关系将id添加到脚本依赖关系中即可。请参阅:来自Opal的http://www.gradle.org/docs/current/userguide/dependency_management.html#file-dependencies

票数 1
EN

Stack Overflow用户

发布于 2017-01-05 02:18:33

我已经修复了下面的Gradle错误:

代码语言:javascript
复制
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任务<junit>之前在Ant脚本build.xml中添加以下行

代码语言:javascript
复制
<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"
/>

这是完整的Ant目标test

代码语言:javascript
复制
<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>

oersanswer about 对我找到上面的补丁很有帮助。

确定问题

为了理解这个问题,我调整了build.xmlbuild.gradle脚本,以比较Ant和Gradle的输出。有关详细信息,另请参阅answer of

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

使用Ant

代码语言:javascript
复制
/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

代码语言:javascript
复制
/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的符号链接)。

长期

this discussion about integration of 中,Luke Daley在2013年11月确认;

ant Gradle使用它自己的

‘实例’,并不使用安装在$ANT_HOME上的东西

Eric Wendelin在this discussion about JUnit 5中表达了在Gradle core中集成更多JUnit的优先考虑。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26000235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档