question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Gradle tools installation cannot be exported

See original GitHub issue
"FAILED TO EXPORT hudson.plugins.gradle.GradleInstallation$DescriptorImpl\
    \ : \nio.jenkins.plugins.casc.ConfiguratorException: Can't read attribute 'installations'\
    \ from hudson.plugins.gradle.GradleInstallation$DescriptorImpl@36972d3a\n\tat\
    \ io.jenkins.plugins.casc.Attribute._getValue(Attribute.java:252)\n\tat io.jenkins.plugins.casc.Attribute.getValue(Attribute.java:166)\n\
    \tat io.jenkins.plugins.casc.Attribute.equals(Attribute.java:199)\n\tat io.jenkins.plugins.casc.BaseConfigurator.compare(BaseConfigurator.java:336)\n\
    \tat io.jenkins.plugins.casc.impl.configurators.DescriptorConfigurator.describe(DescriptorConfigurator.java:65)\n\
    \tat io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator.describe(GlobalConfigurationCategoryConfigurator.java:94)\n\
    \tat io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator.lambda$describe$6(GlobalConfigurationCategoryConfigurator.java:87)\n\
    \tat java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)\n\
    \tat java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)\n\
    \tat java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)\n\
    \tat java.util.Iterator.forEachRemaining(Iterator.java:116)\n\tat java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)\n\
    \tat java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)\n\t\
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)\n\
    \tat java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)\n\
    \tat java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)\n\
    \tat java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)\n\t\
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)\n\t\
    at io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator.describe(GlobalConfigurationCategoryConfigurator.java:87)\n\
    \tat io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator.describe(GlobalConfigurationCategoryConfigurator.java:30)\n\
    \tat io.jenkins.plugins.casc.ConfigurationAsCode.export(ConfigurationAsCode.java:300)\n\
    \tat io.jenkins.plugins.casc.ConfigurationAsCode.doExport(ConfigurationAsCode.java:290)\n\
    \tat java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n\
    \tat org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)\n\t\
    at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)\n\
    \tat org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)\n\
    \tat org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)\n\tat org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)\n\
    \tat org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:129)\n\tat org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)\n\
    \tat org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)\n\tat org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)\n\
    \tat org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)\n\tat org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)\n\
    \tat org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)\n\tat org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)\n\
    \tat org.kohsuke.stapler.Stapler.service(Stapler.java:238)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\
    \tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:860)\n\t\
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)\n\
    \tat hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)\n\
    \tat org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225)\n\
    \tat hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n\
    \tat io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)\n\
    \tat hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n\
    \tat io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61)\n\
    \tat hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n\
    \tat hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)\n\t\
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)\n\
    \tat hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:99)\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)\n\
    \tat hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n\
    \tat jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n\
    \tat org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n\
    \tat org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n\
    \tat org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n\
    \tat jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n\
    \tat org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)\n\
    \tat hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)\n\
    \tat hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n\
    \tat hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)\n\
    \tat hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)\n\
    \tat org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)\n\
    \tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)\n\
    \tat hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)\n\
    \tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)\n\
    \tat org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)\n\
    \tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)\n\
    \tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)\n\
    \tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)\n\
    \tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)\n\
    \tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\n\
    \tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)\n\
    \tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)\n\
    \tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)\n\
    \tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)\n\
    \tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)\n\
    \tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)\n\
    \tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)\n\
    \tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)\n\
    \tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)\n\
    \tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\
    \tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\n\
    \tat org.eclipse.jetty.server.Server.handle(Server.java:530)\n\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:347)\n\
    \tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:256)\n\
    \tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)\n\
    \tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)\n\tat org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)\n\
    \tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)\n\
    \tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140)\n\
    \tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)\n\
    \tat org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:382)\n\
    \tat winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)\n\t\
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\
    \tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\
    \tat java.lang.Thread.run(Thread.java:748)\nCaused by: java.lang.reflect.InvocationTargetException\n\
    \tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\
    \tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\
    \tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat io.jenkins.plugins.casc.Attribute._getValue(Attribute.java:234)\n\
    \t... 104 more\nCaused by: java.lang.NullPointerException\n\tat hudson.plugins.gradle.GradleInstallation$DescriptorImpl.getInstallations(GradleInstallation.java:121)\n\
    \tat hudson.plugins.gradle.GradleInstallation$DescriptorImpl.getInstallations(GradleInstallation.java:98)\n\
    \t... 109 more\n"

It appears that installations returns null for this code:

    @Extension @Symbol("gradle")
    public static class DescriptorImpl extends ToolDescriptor<GradleInstallation> {

        public DescriptorImpl() {
        }

        @Inject
        private Gradle.DescriptorImpl gradleDescriptor;

        @Override
        public String getDisplayName() {
            return Messages.installer_displayName();
        }

        @Override
        public List<? extends ToolInstaller> getDefaultInstallers() {
            return Collections.singletonList(new GradleInstaller(null));
        }

        // for compatibility reasons, the persistence is done by GradleBuilder.DescriptorImpl

        @Override
        public GradleInstallation[] getInstallations() {
            return gradleDescriptor.getInstallations();
        }

        @Override
        public void setInstallations(GradleInstallation... installations) {
            gradleDescriptor.setInstallations(installations);
        }

    }

When we export, gradleDescriptor is null

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Reactions:1
  • Comments:13 (10 by maintainers)

github_iconTop GitHub Comments

1reaction
ndeloofcommented, Aug 28, 2018

sounds like we will need a custom configurator for GradleInstallation$DescriptorImpl and comparable ones, that’s a bad news.

0reactions
darxriggscommented, Jan 6, 2019

@ndeloof, this issue can be closed. It was fixed by jenkinsci/gradle-plugin#63.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Gradle Eclipse Plugin not including exported="true" in ...
The classpathentry nodes generated in the .classpath file no longer contain the exported="true" attribute which is necessary to create a working ...
Read more >
Installing Gradle - Gradle User Manual
Open a second File Explorer window and go to the directory where the Gradle distribution was downloaded. Double-click the ZIP archive to expose...
Read more >
Known issues with Android Studio and Android Gradle Plugin
Studio tries to import previous .vmoptions and sanitize them to work with the garbage collector used by JDK 11. If that process fails,...
Read more >
Exporting a project to Gradle and building/deploying on ...
Symptoms: I want to export my project via Gradle and use Android Studio ... installation folder>/PlaybackEngines/AndroidPlayer/Tools/gradle.
Read more >
Gradle - Installation - Tutorialspoint
Gradle - Installation, Gradle is a build tool based on java. There are some prerequisites that are required to be installed before installing...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found