Groovy 詹金斯抓取错误

Groovy jenkins Grab ERROR

我正在尝试 运行 Jenkins 上的 groovy 脚本。我用的是"Execute system groovy script"。我的脚本需要使用 REST,因此我需要 http-builder。这是我尝试获取它的方法:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1') 

import groovyx.net.http.HTTPBuilder

但是,当我按下检查语法按钮时,出现以下错误:

javax.servlet.ServletException:java.lang.NoClassDefFoundError:org/apache/ivy/core/settings/IvySettings 在 org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:796) 在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) 在 org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:233) 在 org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) 在 org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) 在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) 在 org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:233) 在 org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) 在 org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) 在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) 在 org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:233) 在 org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) 在 org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) 在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) 在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:649) 在 org.kohsuke.stapler.Stapler.service(Stapler.java:238) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) 在 hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:135) 在 hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:126) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 在 hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:49) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84) 在 hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 在 jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 在 org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 在 org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 在 org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 在 jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 在 org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) 在 hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 在 hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76) 在 hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 在 org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 在 hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 在 org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 在 org.eclipse.jetty.server.Server.handle(Server.java:499) 在 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 在 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 在 org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 在 winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(来源不明) 在 java.lang.Thread.run(来源不明) 原因:java.lang.NoClassDefFoundError:org/apache/ivy/core/settings/IvySettings 在 java.lang.Class.getDeclaredMethods0(本机方法) 在 java.lang.Class.privateGetDeclaredMethods(未知来源) 在 java.lang.Class.privateGetPublicMethods(未知来源) 在 java.lang.Class.getMethods(未知来源) 在 java.beans.Introspector.getPublicDeclaredMethods(来源不明) 在 java.beans.Introspector.getTargetMethodInfo(来源不明) 在 java.beans.Introspector.getBeanInfo(来源不明) 在 java.beans.Introspector.getBeanInfo(来源不明) 在 groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:3290) 在 java.security.AccessController.doPrivileged(本机方法) 在 groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3288) 在 groovy.lang.MetaClassImpl.初始化(MetaClassImpl.java:3265) 在 org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:254) 在 org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:285) 在 groovy.grape.GrapeIvy.$getStaticMetaClass(GrapeIvy.groovy) 在 groovy.grape.GrapeIvy.(GrapeIvy.groovy:81) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(来源不明) 在 java.lang.reflect.Constructor.newInstance(来源不明) 在 java.lang.Class.newInstance(未知来源) 在 groovy.grape.Grape.getInstance(Grape.java:121) 在 groovy.grape.Grape.grab(Grape.java:159) 在 groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:378) 在 org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:321) 在 org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931) 在 org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593) 在 org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569) 在 org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546) 在 groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) 在 groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268) 在 groovy.lang.GroovyShell.parseClass(GroovyShell.java:688) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:700) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:736) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:727) 在 hudson.plugins.groovy.StringScriptSource$DescriptorImpl.doCheckScript(StringScriptSource.java:71) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明) 在 java.lang.reflect.Method.invoke(来源不明) 在 org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:324) 在 org.kohsuke.stapler.Function.bindAndInvoke(Function.java:167) 在 org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:100) 在 org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:124) 在 org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) 在 org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) ... 66 更多 由以下原因引起:java.lang.ClassNotFoundException:org.apache.ivy.core.settings.IvySettings 在 java.net.URLClassLoader.findClass(来源不明) 在 java.lang.ClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:450) 在 org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:403) ... 还有 112 个

有什么想法吗?

我找到了问题的答案。就是下载ivy.jar复制到Jenkins的lib目录下(例如C:\Program Files (x86)\Jenkins\war\WEB-INF\lib),然后重启Jenkins(例如通过系统服务),就可以使用@Grab了从脚本控制台。延伸阅读:https://groups.google.com/forum/#!msg/job-dsl-plugin/EG6eqQYYI7M/2TKKysNw4QEJ