Ant Groovy类路径未由<;正确设置;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 =
@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?这似乎没有帮助。见我的更新二。