我试图在我的简单Groovy脚本中使用“HTTPBuilder” . 当我使用'@Grab'导入依赖项时,一切正常 . 虽然,我想将jar保存在不同的目录中,并使用classLoader函数导入它 . 我复制了'http-builder-0.7.jar',将'@Grab'放入我的grape目录并将其粘贴到我的Groovy脚本运行的同一目录中(在Windows上) . 然后我注释掉'@Grab'语句并包含classLoader,但是得到这个错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:C:\ Groovy Scripts \ test.groovy:9:无法解析类HTTPBuilder
任何想法为什么classLoader不会在脚本中工作?我在使用'@Grab'导入时打印出jar的路径,并且肯定使用了grape目录中的那个 . 如果我取消注释'@Grab'语句,它会再次起作用 . 这是小脚本......
//@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7')
this.getClass().classLoader.rootLoader.addURL(new File("http-builder-0.7.jar").toURL())
//return new File(groovyx.net.http.HTTPBuilder.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
def http = new HTTPBuilder('http://httpbin.org/get')
1 回答
如上所述,您最好使用其他方法,例如Gradle的application plugin .
但是,这是一种做你要求的方法 .
首先,要获取jar和所有依赖项,请考虑以下Gradle
build.gradle
脚本:如果你运行
gradle getDeps
,它会将所有的 jar 写入runtime
.然后,在Unix终端(例如)中,您可以使用此设置类路径(使用Java 6中的通配符语法,并假设路径与上面的
runtime
相同):在同一个终端,这将工作: