Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant Groovy类路径未由<;正确设置;groovy>;蚂蚁任务_Ant_Groovy_Classpath - Fatal编程技术网

Ant Groovy类路径未由<;正确设置;groovy>;蚂蚁任务

Ant Groovy类路径未由<;正确设置;groovy>;蚂蚁任务,ant,groovy,classpath,Ant,Groovy,Classpath,我的Groovy脚本依赖于一些库。这就是我在脚本顶部的内容 @Grapes([ @Grab(group = 'net.sf.json-lib', module = 'json-lib', version = '2.3', classifier = 'jdk15'), @Grab(group = 'org.codehaus.groovy.modules.http-builder', module = 'http-builder', version =

我的Groovy脚本依赖于一些库。这就是我在脚本顶部的内容

@Grapes([
    @Grab(group = 'net.sf.json-lib', module = 'json-lib', version = '2.3',
        classifier = 'jdk15'),
    @Grab(group = 'org.codehaus.groovy.modules.http-builder',
        module = 'http-builder', version = '0.7.1'),
    @Grab(group = 'commons-cli', module = 'commons-cli', version = '1.2')])
当我使用
groovy
executable从命令行运行脚本时,一切正常。人工制品被下载,脚本运行

但是,如果我尝试使用
(简化)从ApacheAnt执行相同的脚本,也会解析和下载这些工件,但随后在线程“main”java.lang.NoClassDefFoundError:org/Apache/commons/cli/ParseException中会出现
[groovy]异常

ApacheAnt安装使用了我从安装的groovy安装中复制的
groovy-all-2.3.6.jar
,因此它们应该非常相同

我错过了什么?如何使
任务正常工作并使用下载的JAR

更新I


我认为问题在于Grape和Ant使用不同的类装入器,因此Ant看不到工件。您可以尝试在@Grape注释之后将@GrabConfig(systemClassLoader=true)添加到groovy脚本中吗

如果我这样做,在转换过程中会出现
一般错误:找不到适合grab的类加载器

更新II

我现在也试过:

import groovy.grape.Grape;
Grape.grab(group:"commons-cli", module:"commons-cli", version:"1.2", classLoader:this.class.classLoader.rootLoader)
//...
这没有帮助。我得到编译时错误,然后:

   [groovy] Exception in thread "main" Script Failed: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
   [groovy] C:\Users\xxx\AppData\Local\Temp\embedded_script_in_2825216891785993632groovy_Ant_task: 18: unable to resolve class groovyx.net.http.HTTPBuilder
   [groovy]  @ line 18, column 1.
   [groovy]    import groovyx.net.http.HTTPBuilder
   [groovy]    ^

去掉@Grab并使用static.Grab()方法。它允许您指定根加载器类加载器,Ant可以看到:

import groovy.grape.Grape;

Grape.grab(group:"commons-cli", module:"commons-cli", version:"1.2", classLoader:this.class.classLoader.rootLoader)
<repeat for rest of @Grab>
导入groovy.grape.grape;
grab(组:“commons cli”,模块:“commons cli”,版本:“1.2”,类加载器:this.class.classLoader.rootLoader)

我认为问题在于Grape和Ant使用不同的类加载器,因此Ant看不到工件。你能试着在@Grape注释之后将@GrabConfig(systemClassLoader=true)添加到groovy脚本中吗?@DakotaBrown:我已经试过了。请参阅我对这个问题的更新。Grape应该通过抓取org.codehaus.groovy.modules.HTTPBuilder来为您处理HTTPBuilder,而您为什么需要显式导入HTTPBuilder?这似乎没有帮助。见我的更新二。