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

Reply via email to