I'm having a few difficulties on this. The GroovyShell is initialized with a ClassLoader like this:
private static final class Script implements DelegatingCallable<String,RuntimeException> { private final String script; private transient ClassLoader cl; private Script(String script) { this.script = script; cl = getClassLoader(); } public ClassLoader getClassLoader() { return Jenkins.getInstance().getPluginManager().uberClassLoader; } public String call() throws RuntimeException { // if we run locally, cl!=null. Otherwise the delegating classloader will be available as context classloader. if (cl==null) cl = Thread.currentThread().getContextClassLoader(); GroovyShell shell = new GroovyShell(cl); StringWriter out = new StringWriter(); PrintWriter pw = new PrintWriter(out); shell.setVariable("out", pw); try { Object output = shell.evaluate(script); if(output!=null) pw.println("Result: "+output); } catch (Throwable t) { t.printStackTrace(pw); } return out.toString(); } } The part I am interested in is when it uses the uberClassLoader vs using the getContextClassLoader. How is cl set to null for executing remotely? I am trying to replicate this setup for the groovy templating in the email-ext plugin so it can load other plugins and such. Thanks, slide On Wed, Apr 11, 2012 at 3:05 PM, Darren Syzling <dsyzl...@gmail.com> wrote: > Thanks for looking into this - replying late but yes I tried explicit > imports to no avail. Makes sense that a different class loader was > being used. > > Look forward to testing an updated version when available. > > > Darren > > On 11 April 2012 21:06, Slide <slide.o....@gmail.com> wrote: >> Ok, it looks like the groovy script console sets the classloader for >> the context to Jenkins.getInstance().getPluginManager().uberClassLoader, >> which the email-ext plugin does NOT do. I will look at updating this >> and trying it out and if it works, I'll release a new version of >> email-ext. >> >> slide >> >> On Wed, Apr 11, 2012 at 8:51 AM, Slide <slide.o....@gmail.com> wrote: >>> I also can't seem to get the groovy template to load the >>> WarningsResultAction class. I tried similar things to what you did >>> below. I will see if I can figure out what this is the case. >>> >>> Thanks, >>> >>> slide >>> >>> On Wed, Apr 11, 2012 at 5:57 AM, Darren Syzling <dsyzl...@gmail.com> wrote: >>>> Ulli, >>>> >>>> I'd be happy to work on something together. I did however try a few >>>> variants but the hudson.plugins.warnings.WarningsResultAction class >>>> could not be found, I tried variants of this: >>>> >>>> warningsResultAction = >>>> build.getAction(Class.forName("hudson.plugins.warnings.WarningsResultAction")) >>>> warningsResultAction = >>>> build.getAction(hudson.plugins.warnings.WarningsResultAction.class) >>>> >>>> and using the class loader: >>>> ClassLoader cl = it.class.getClassLoader() >>>> def warningsClass = >>>> cl.loadClass("hudson.plugins.warnings.WarningsResultAction", true) >>>> >>>> Is there something different about the groovy parser engine loaded by >>>> email-ext which would mean other plugin classes were not available. >>>> >>>> Unfortunately I then decided to upgrade to Jenkins 1.459 along with: >>>> Static analysis utilities 1.38 >>>> Warnings 3.28 >>>> Static analysis collector 1.24 >>>> Email-ext 2.18 >>>> >>>> This has broken my ability to build and configure the project, when I >>>> build: >>>> 11-Apr-2012 13:55:43 hudson.model.Executor run >>>> SEVERE: Executor threw an exception >>>> java.lang.AssertionError: class >>>> hudson.plugins.warnings.WarningsPublisher is missing its descriptor >>>> at jenkins.model.Jenkins.getDescriptorOrDie(Jenkins.java:1076) >>>> at hudson.tasks.Publisher.getDescriptor(Publisher.java:123) >>>> at hudson.tasks.Recorder.getDescriptor(Recorder.java:51) >>>> at >>>> hudson.plugins.warnings.WarningsPublisher.getDescriptor(WarningsPublisher.java:323) >>>> at >>>> hudson.plugins.warnings.WarningsPublisher.getDescriptor(WarningsPublisher.java:41) >>>> at hudson.model.Descriptor.toMap(Descriptor.java:873) >>>> at hudson.util.DescribableList.toMap(DescribableList.java:128) >>>> at hudson.model.Project.getPublishers(Project.java:109) >>>> at hudson.model.Build$RunnerImpl.cleanUp(Build.java:171) >>>> at hudson.model.Run.run(Run.java:1457) >>>> at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) >>>> at >>>> hudson.model.ResourceController.execute(ResourceController.java:88) >>>> at hudson.model.Executor.run(Executor.java:238) >>>> >>>> >>>> and when I try and configure the project I can't access email-ext or >>>> warnings configuration information: >>>> 11-Apr-2012 13:46:50 hudson.ExpressionFactory2$JexlExpression evaluate >>>> WARNING: Caught exception evaluating: i.descriptor. Reason: >>>> java.lang.reflect.InvocationTargetExcept >>>> ion >>>> java.lang.reflect.InvocationTargetException >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) >>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) >>>> at java.lang.reflect.Method.invoke(Unknown Source) >>>> at >>>> org.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125) >>>> at >>>> org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectIm >>>> pl.java:314) >>>> at >>>> org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185) >>>> at >>>> org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75) >>>> at >>>> org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) >>>> at >>>> org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) >>>> at >>>> org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:5 >>>> 1) >>>> at >>>> org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) >>>> at >>>> hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:72) >>>> at >>>> org.apache.commons.jelly.tags.core.CoreTagLibrary$3.run(CoreTagLibrary.java:134) >>>> >>>> >>>> >>>> On 11 April 2012 10:53, Ullrich Hafner <ullrich.haf...@gmail.com> wrote: >>>>> I haven't yet done that but it should be possible to access the objects >>>>> using this method from your script: >>>>> >>>>> WarningsResultAction action = >>>>> getAction("hudson.plugins.warnings.WarningsResultAction") >>>>> From this object you get the result using action.getResult() >>>>> >>>>> Maybe we can work together on making an example for the warnings plug-in >>>>> so that I can include it on the wiki page? >>>>> >>>>> Ulli >>>>> >>>>> >>>>> >>>>> On 04/11/2012 11:25 AM, Darren Syzling wrote: >>>>>> Regarding the Warnings plugin - is there anyway I can access warning >>>>>> information for the current build from a mail-ext groovy template by >>>>>> using the hudson/jenkins model API? Or would I use the token macro >>>>>> expansion plugin in some way? I was wondering if there was a >>>>>> documented way of gaining access to the WarningsResult and >>>>>> WarningsResultAction so I could access the getSummary method from >>>>>> within the mail template (or iterate over other information if >>>>>> necessary) in a similar way to accessing JUnit test results? I >>>>>> wondered if there was a standard way for plugins to publish their >>>>>> action results into the Hudson model so that post build actions could >>>>>> retrieve and process them, >>>>>> >>>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Regards >>>> Darren >>> >>> >>> >>> -- >>> Website: http://earl-of-code.com >> >> >> >> -- >> Website: http://earl-of-code.com -- Website: http://earl-of-code.com