I've used some responsive email templates and created a pretty looking email for build reports. Some people unfortunately use gmail, and they still see terrible emails because gmail completely wipes out the style tags in my email.
I'm using jsoup to inline the styles in my emails so gmail will render emails correctly. The other option is to author the template with inline styles, but that goes against DRY. R, rahul Rahul Somasunderam +1 510 270 2883 On Mon, Mar 18, 2013 at 9:21 PM, Slide <slide.o....@gmail.com> wrote: > External libraries are not currently supported, I don't think it > necessarily will be either, what exact functionality do you need from an > external library? > > > On Mon, Mar 18, 2013 at 9:19 PM, Rahul Somasunderam > <rahul....@gmail.com>wrote: > >> Hi, >> >> I'm trying to write a groovy script to modify the message being sent out >> by the email-ext plugin. >> >> I tried using Grab but that gave me this: >> >> >> Executing pre-send script >> java.lang.**NoClassDefFoundError: org/apache/ivy/core/report/**ResolveReport >> at java.lang.Class.**getDeclaredMethods0(Native Method) >> at java.lang.Class.**privateGetDeclaredMethods(**Class.java:2442) >> at java.lang.Class.**getDeclaredMethods(Class.java:**1808) >> at >> org.codehaus.groovy.**reflection.CachedClass$3$1.**run(CachedClass.java:84) >> at java.security.**AccessController.doPrivileged(**Native Method) >> at >> org.codehaus.groovy.**reflection.CachedClass$3.**initValue(CachedClass.java:81) >> at >> org.codehaus.groovy.**reflection.CachedClass$3.**initValue(CachedClass.java:79) >> at >> org.codehaus.groovy.util.**LazyReference.getLocked(**LazyReference.java:46) >> at org.codehaus.groovy.util.**LazyReference.get(**LazyReference.java:33) >> at >> org.codehaus.groovy.**reflection.CachedClass.**getMethods(CachedClass.java:**250) >> at groovy.lang.MetaClassImpl.**populateMethods(MetaClassImpl.**java:341) >> at groovy.lang.MetaClassImpl.**fillMethodIndex(MetaClassImpl.**java:291) >> at groovy.lang.MetaClassImpl.**initialize(MetaClassImpl.java:**2900) >> at >> org.codehaus.groovy.**reflection.ClassInfo.**getMetaClassUnderLock(**ClassInfo.java:166) >> at >> org.codehaus.groovy.**reflection.ClassInfo.**getMetaClass(ClassInfo.java:**182) >> at groovy.grape.GrapeIvy.$**getStaticMetaClass(GrapeIvy.**groovy) >> at groovy.grape.GrapeIvy.<init>(**GrapeIvy.groovy:69) >> at sun.reflect.**NativeConstructorAccessorImpl.**newInstance0(Native >> Method) >> at >> sun.reflect.**NativeConstructorAccessorImpl.**newInstance(**NativeConstructorAccessorImpl.**java:57) >> at >> sun.reflect.**DelegatingConstructorAccessorI**mpl.newInstance(**DelegatingConstructorAccessorI**mpl.java:45) >> at java.lang.reflect.Constructor.**newInstance(Constructor.java:**525) >> at java.lang.Class.newInstance0(**Class.java:372) >> at java.lang.Class.newInstance(**Class.java:325) >> at groovy.grape.Grape.**getInstance(Grape.java:101) >> at groovy.grape.Grape.grab(Grape.**java:136) >> at >> groovy.grape.**GrabAnnotationTransformation.**visit(**GrabAnnotationTransformation.**java:283) >> at >> org.codehaus.groovy.transform.**ASTTransformationVisitor$3.**call(ASTTransformationVisitor.**java:302) >> at >> org.codehaus.groovy.control.**CompilationUnit.**applyToSourceUnits(**CompilationUnit.java:843) >> at >> org.codehaus.groovy.control.**CompilationUnit.**doPhaseOperation(**CompilationUnit.java:548) >> at >> org.codehaus.groovy.control.**CompilationUnit.**processPhaseOperations(**CompilationUnit.java:524) >> at >> org.codehaus.groovy.control.**CompilationUnit.compile(**CompilationUnit.java:501) >> at >> groovy.lang.GroovyClassLoader.**doParseClass(**GroovyClassLoader.java:306) >> at >> groovy.lang.GroovyClassLoader.**parseClass(GroovyClassLoader.**java:287) >> at groovy.lang.GroovyShell.**parseClass(GroovyShell.java:**731) >> at groovy.lang.GroovyShell.parse(**GroovyShell.java:743) >> at groovy.lang.GroovyShell.**evaluate(GroovyShell.java:578) >> at groovy.lang.GroovyShell.**evaluate(GroovyShell.java:618) >> at groovy.lang.GroovyShell.**evaluate(GroovyShell.java:589) >> at >> hudson.plugins.emailext.**ExtendedEmailPublisher.**executePresendScript(**ExtendedEmailPublisher.java:**415) >> at >> hudson.plugins.emailext.**ExtendedEmailPublisher.**sendMail(**ExtendedEmailPublisher.java:**314) >> at >> hudson.plugins.emailext.**ExtendedEmailPublisher._**perform(**ExtendedEmailPublisher.java:**296) >> at >> hudson.plugins.emailext.**ExtendedEmailPublisher.**perform(**ExtendedEmailPublisher.java:**256) >> at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method) >> at >> sun.reflect.**NativeMethodAccessorImpl.**invoke(**NativeMethodAccessorImpl.java:**57) >> at >> sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**DelegatingMethodAccessorImpl.**java:43) >> at java.lang.reflect.Method.**invoke(Method.java:601) >> at >> org.codehaus.groovy.runtime.**callsite.PojoMetaMethodSite$**PojoCachedMethodSite.invoke(**PojoMetaMethodSite.java:189) >> at >> org.codehaus.groovy.runtime.**callsite.PojoMetaMethodSite.**call(PojoMetaMethodSite.java:**53) >> at >> org.codehaus.groovy.runtime.**callsite.CallSiteArray.**defaultCall(CallSiteArray.**java:42) >> at >> org.codehaus.groovy.runtime.**callsite.AbstractCallSite.**call(AbstractCallSite.java:**108) >> at >> org.codehaus.groovy.runtime.**callsite.AbstractCallSite.**call(AbstractCallSite.java:**124) >> at Script1$_run_closure1.doCall(**Script1.groovy:26) >> at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method) >> at >> sun.reflect.**NativeMethodAccessorImpl.**invoke(**NativeMethodAccessorImpl.java:**57) >> at >> sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**DelegatingMethodAccessorImpl.**java:43) >> at java.lang.reflect.Method.**invoke(Method.java:601) >> at >> org.codehaus.groovy.**reflection.CachedMethod.**invoke(CachedMethod.java:90) >> at groovy.lang.MetaMethod.**doMethodInvoke(MetaMethod.**java:233) >> at >> org.codehaus.groovy.runtime.**metaclass.ClosureMetaClass.**invokeMethod(ClosureMetaClass.**java:272) >> at groovy.lang.MetaClassImpl.**invokeMethod(MetaClassImpl.**java:884) >> at groovy.lang.Closure.call(**Closure.java:412) >> at groovy.lang.Closure.call(**Closure.java:425) >> at >> org.codehaus.groovy.runtime.**DefaultGroovyMethods.each(**DefaultGroovyMethods.java:**1377) >> at >> org.codehaus.groovy.runtime.**DefaultGroovyMethods.each(**DefaultGroovyMethods.java:**1349) >> at org.codehaus.groovy.runtime.**dgm$149.invoke(Unknown Source) >> at >> org.codehaus.groovy.runtime.**callsite.PojoMetaMethodSite$**PojoMetaMethodSiteNoUnwrapNoCo**erce.invoke(**PojoMetaMethodSite.java:271) >> at >> org.codehaus.groovy.runtime.**callsite.PojoMetaMethodSite.**call(PojoMetaMethodSite.java:**53) >> at >> org.codehaus.groovy.runtime.**callsite.CallSiteArray.**defaultCall(CallSiteArray.**java:42) >> at >> org.codehaus.groovy.runtime.**callsite.AbstractCallSite.**call(AbstractCallSite.java:**108) >> at >> org.codehaus.groovy.runtime.**callsite.AbstractCallSite.**call(AbstractCallSite.java:**116) >> at Script1.run(Script1.groovy:19) >> at groovy.lang.GroovyShell.**evaluate(GroovyShell.java:580) >> at groovy.lang.GroovyShell.**evaluate(GroovyShell.java:618) >> at groovy.lang.GroovyShell.**evaluate(GroovyShell.java:589) >> at >> hudson.util.**RemotingDiagnostics$Script.**call(RemotingDiagnostics.java:**150) >> at >> hudson.util.**RemotingDiagnostics$Script.**call(RemotingDiagnostics.java:**122) >> at hudson.remoting.LocalChannel.**call(LocalChannel.java:45) >> at >> hudson.util.**RemotingDiagnostics.**executeGroovy(**RemotingDiagnostics.java:119) >> at jenkins.model.Jenkins.**doScript(Jenkins.java:3349) >> at jenkins.model.Jenkins.**doScript(Jenkins.java:3332) >> at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method) >> at >> sun.reflect.**NativeMethodAccessorImpl.**invoke(**NativeMethodAccessorImpl.java:**57) >> at >> sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**DelegatingMethodAccessorImpl.**java:43) >> at java.lang.reflect.Method.**invoke(Method.java:601) >> at >> org.kohsuke.stapler.Function$**InstanceFunction.invoke(**Function.java:288) >> at org.kohsuke.stapler.Function.**bindAndInvoke(Function.java:**151) >> at >> org.kohsuke.stapler.Function.**bindAndInvokeAndServeResponse(**Function.java:90) >> at org.kohsuke.stapler.MetaClass$**1.doDispatch(MetaClass.java:**111) >> at >> org.kohsuke.stapler.**NameBasedDispatcher.dispatch(**NameBasedDispatcher.java:53) >> at org.kohsuke.stapler.Stapler.**tryInvoke(Stapler.java:573) >> at org.kohsuke.stapler.Stapler.**invoke(Stapler.java:658) >> at org.kohsuke.stapler.Stapler.**invoke(Stapler.java:487) >> at org.kohsuke.stapler.Stapler.**service(Stapler.java:164) >> at javax.servlet.http.**HttpServlet.service(**HttpServlet.java:717) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**internalDoFilter(**ApplicationFilterChain.java:**290) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**doFilter(**ApplicationFilterChain.java:**206) >> at >> hudson.util.**PluginServletFilter$1.**doFilter(PluginServletFilter.**java:95) >> at >> hudson.util.**PluginServletFilter.doFilter(**PluginServletFilter.java:87) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**internalDoFilter(**ApplicationFilterChain.java:**235) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**doFilter(**ApplicationFilterChain.java:**206) >> at hudson.security.csrf.**CrumbFilter.doFilter(**CrumbFilter.java:47) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**internalDoFilter(**ApplicationFilterChain.java:**235) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**doFilter(**ApplicationFilterChain.java:**206) >> at >> hudson.security.**ChainedServletFilter$1.**doFilter(ChainedServletFilter.**java:84) >> at >> hudson.security.**ChainedServletFilter.doFilter(**ChainedServletFilter.java:76) >> at hudson.security.HudsonFilter.**doFilter(HudsonFilter.java:**164) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**internalDoFilter(**ApplicationFilterChain.java:**235) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**doFilter(**ApplicationFilterChain.java:**206) >> at >> org.kohsuke.stapler.**compression.CompressionFilter.**doFilter(CompressionFilter.**java:50) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**internalDoFilter(**ApplicationFilterChain.java:**235) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**doFilter(**ApplicationFilterChain.java:**206) >> at >> hudson.util.**CharacterEncodingFilter.**doFilter(**CharacterEncodingFilter.java:**81) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**internalDoFilter(**ApplicationFilterChain.java:**235) >> at >> org.apache.catalina.core.**ApplicationFilterChain.**doFilter(**ApplicationFilterChain.java:**206) >> at >> org.apache.catalina.core.**StandardWrapperValve.invoke(**StandardWrapperValve.java:233) >> at >> org.apache.catalina.core.**StandardContextValve.invoke(**StandardContextValve.java:191) >> at >> org.apache.catalina.**authenticator.**AuthenticatorBase.invoke(**AuthenticatorBase.java:470) >> at >> org.apache.catalina.core.**StandardHostValve.invoke(**StandardHostValve.java:127) >> at >> org.apache.catalina.valves.**ErrorReportValve.invoke(**ErrorReportValve.java:102) >> at >> org.apache.catalina.core.**StandardEngineValve.invoke(**StandardEngineValve.java:109) >> at >> org.apache.catalina.connector.**CoyoteAdapter.service(**CoyoteAdapter.java:298) >> at >> org.apache.jk.server.**JkCoyoteHandler.invoke(**JkCoyoteHandler.java:190) >> at >> org.apache.jk.common.**HandlerRequest.invoke(**HandlerRequest.java:291) >> at org.apache.jk.common.**ChannelSocket.invoke(**ChannelSocket.java:776) >> at >> org.apache.jk.common.**ChannelSocket.**processConnection(**ChannelSocket.java:705) >> at >> org.apache.jk.common.**ChannelSocket$**SocketConnection.runIt(**ChannelSocket.java:898) >> at >> org.apache.tomcat.util.**threads.ThreadPool$**ControlRunnable.run(**ThreadPool.java:690) >> at java.lang.Thread.run(Thread.**java:722) >> Caused by: java.lang.**ClassNotFoundException: >> org.apache.ivy.core.report.**ResolveReport >> at >> org.apache.catalina.loader.**WebappClassLoader.loadClass(**WebappClassLoader.java:1680) >> at >> org.apache.catalina.loader.**WebappClassLoader.loadClass(**WebappClassLoader.java:1526) >> ... 128 more >> >> >> My script has @Grab annotations to fetch some libs I need. I'm wondering >> if that's supported. If not is there a workaround? >> >> R, >> rahul >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Jenkins Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to jenkinsci-users+unsubscr...@googlegroups.com. >> >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > > > -- > Website: http://earl-of-code.com > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Jenkins Users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/jenkinsci-users/Avme-hTCeDs/unsubscribe?hl=en > . > To unsubscribe from this group and all its topics, send an email to > jenkinsci-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- You received this message because you are subscribed to the Google Groups "Jenkins Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.