-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
HideAdoptOpenJDK jre-8.0.282.8-hotspot
Jenkins 2.277.1
Warnings Next Generation Plugin 8.10.1
Analysis Model API Plugin 9.8.1
Checks API plugin 1.7.0
DataTables.net API Plugin 1.10.23-3
ECharts API Plugin 5.0.1-1
Forensics API Plugin 1.0.0
Git Forensics Plugin 1.0.0
Plugin Utilities API Plugin 2.1.0
Jackson 2 API Plugin 2.12.1ShowAdoptOpenJDK jre-8.0.282.8-hotspot Jenkins 2.277.1 Warnings Next Generation Plugin 8.10.1 Analysis Model API Plugin 9.8.1 Checks API plugin 1.7.0 DataTables.net API Plugin 1.10.23-3 ECharts API Plugin 5.0.1-1 Forensics API Plugin 1.0.0 Git Forensics Plugin 1.0.0 Plugin Utilities API Plugin 2.1.0 Jackson 2 API Plugin 2.12.1
On the web page of a branch of a multibranch project, the warnings trend chart does not render. Instead, there is a placeholder with a progress ring and the text "loading". The developer tools in the Web browser show HTTP status 500 from a POST /jenkins/$stapler/bound/6d08ec1b-ebf8-4765-ad4e-b89a4089ea71/getBuildTrendModel request, and the Jenkins log shows various exceptions, depending on plugin and JVM versions and perhaps other things:
- java.lang.NoClassDefFoundError: edu/hm/hafner/echarts/LineSeries
- java.lang.LinkageError: edu.hm.hafner.echarts.LineSeries
- java.lang.LinkageError: A duplicate class definition for edu/hm/hafner/echarts/JacksonFacade is found
- java.lang.LinkageError: loader (instance of hudson/ClassicPluginStrategy$AntClassLoader2): attempted duplicate class definition for name: "edu/hm/hafner/echarts/JacksonFacade"
The classes edu.hm.hafner.echarts.LineSeries and edu.hm.hafner.echarts.JacksonFacade are defined in both plugins/echarts-api/WEB-INF/lib/echarts-api.jar and plugins/echarts-api/WEB-INF/lib/echarts-build-trends-2.0.0.jar. Those jar files are included in plugins/echarts-api.jpi (ECharts API Plugin 5.0.1-1). This seems to be a bug in that plugin, then.
$ unzip -l plugins/echarts-api/WEB-INF/lib/echarts-build-trends-2.0.0.jar Archive: plugins/echarts-api/WEB-INF/lib/echarts-build-trends-2.0.0.jar Length Date Time Name --------- ---------- ----- ---- 221 2020-05-13 01:12 META-INF/MANIFEST.MF 0 2020-05-13 01:12 META-INF/ 0 2020-05-13 01:12 edu/ 0 2020-05-13 01:12 edu/hm/ 0 2020-05-13 01:12 edu/hm/hafner/ 0 2020-05-13 01:12 edu/hm/hafner/echarts/ 0 2020-05-13 01:12 META-INF/maven/ 0 2020-05-13 01:12 META-INF/maven/edu.hm.hafner/ 0 2020-05-13 01:12 META-INF/maven/edu.hm.hafner/echarts-build-trends/ 1287 2020-05-13 01:12 edu/hm/hafner/echarts/ChartModelConfiguration.class 2914 2020-05-13 01:12 edu/hm/hafner/echarts/LineSeries.class 13228 2020-05-13 01:12 edu/hm/hafner/echarts/SeriesBuilder.class 4002 2020-05-13 01:12 edu/hm/hafner/echarts/LinesDataSet.class 2313 2020-05-13 01:12 edu/hm/hafner/echarts/Palette.class 2168 2020-05-13 01:12 edu/hm/hafner/echarts/ResultTime.class 976 2020-05-13 01:12 edu/hm/hafner/echarts/BuildResult.class 2743 2020-05-13 01:12 edu/hm/hafner/echarts/LinesChartModel.class 1247 2020-05-13 01:12 edu/hm/hafner/echarts/ChartModelConfiguration$AxisType.class 3454 2020-05-13 01:12 edu/hm/hafner/echarts/PercentagePieChart.class 283 2020-05-13 01:12 edu/hm/hafner/echarts/package-info.class 1490 2020-05-13 01:12 edu/hm/hafner/echarts/PieData.class 1689 2020-05-13 01:12 edu/hm/hafner/echarts/PieChartModel.class 1917 2020-05-13 01:12 edu/hm/hafner/echarts/LocalDateLabel.class 2111 2020-05-13 01:12 edu/hm/hafner/echarts/Build.class 1073 2020-05-13 01:12 edu/hm/hafner/echarts/JacksonFacade.class 579 2020-05-13 01:12 edu/hm/hafner/echarts/AreaStyle.class 485 2020-05-13 01:12 edu/hm/hafner/echarts/ItemStyle.class 1176 2020-05-13 01:12 edu/hm/hafner/echarts/LineSeries$StackedMode.class 1159 2020-05-13 01:12 edu/hm/hafner/echarts/LineSeries$FilledMode.class 1496 2020-05-13 01:12 edu/hm/hafner/echarts/TimeFacade.class 4969 2020-05-13 01:12 META-INF/maven/edu.hm.hafner/echarts-build-trends/pom.xml 68 2020-05-13 01:12 META-INF/maven/edu.hm.hafner/echarts-build-trends/pom.properties --------- ------- 53048 32 files
$ unzip -l plugins/echarts-api/WEB-INF/lib/echarts-api.jar Archive: plugins/echarts-api/WEB-INF/lib/echarts-api.jar Length Date Time Name --------- ---------- ----- ---- 0 2021-03-03 18:04 META-INF/ 808 2021-03-03 18:04 META-INF/MANIFEST.MF 0 2021-03-03 18:04 edu/ 0 2021-03-03 18:04 edu/hm/ 0 2021-03-03 18:04 edu/hm/hafner/ 0 2021-03-03 18:04 edu/hm/hafner/echarts/ 0 2021-03-03 18:04 io/ 0 2021-03-03 18:04 io/jenkins/ 0 2021-03-03 18:04 io/jenkins/plugins/ 0 2021-03-03 18:04 io/jenkins/plugins/echarts/ 0 2021-03-03 18:04 charts/ 1287 2020-05-13 01:12 edu/hm/hafner/echarts/ChartModelConfiguration.class 2914 2020-05-13 01:12 edu/hm/hafner/echarts/LineSeries.class 13228 2020-05-13 01:12 edu/hm/hafner/echarts/SeriesBuilder.class 4002 2020-05-13 01:12 edu/hm/hafner/echarts/LinesDataSet.class 2313 2020-05-13 01:12 edu/hm/hafner/echarts/Palette.class 2168 2020-05-13 01:12 edu/hm/hafner/echarts/ResultTime.class 976 2020-05-13 01:12 edu/hm/hafner/echarts/BuildResult.class 2743 2020-05-13 01:12 edu/hm/hafner/echarts/LinesChartModel.class 1247 2020-05-13 01:12 edu/hm/hafner/echarts/ChartModelConfiguration$AxisType.class 3454 2020-05-13 01:12 edu/hm/hafner/echarts/PercentagePieChart.class 283 2020-05-13 01:12 edu/hm/hafner/echarts/package-info.class 1490 2020-05-13 01:12 edu/hm/hafner/echarts/PieData.class 1689 2020-05-13 01:12 edu/hm/hafner/echarts/PieChartModel.class 1917 2020-05-13 01:12 edu/hm/hafner/echarts/LocalDateLabel.class 2111 2020-05-13 01:12 edu/hm/hafner/echarts/Build.class 1073 2020-05-13 01:12 edu/hm/hafner/echarts/JacksonFacade.class 579 2020-05-13 01:12 edu/hm/hafner/echarts/AreaStyle.class 485 2020-05-13 01:12 edu/hm/hafner/echarts/ItemStyle.class 1176 2020-05-13 01:12 edu/hm/hafner/echarts/LineSeries$StackedMode.class 1159 2020-05-13 01:12 edu/hm/hafner/echarts/LineSeries$FilledMode.class 1496 2020-05-13 01:12 edu/hm/hafner/echarts/TimeFacade.class 877 2021-03-03 18:04 io/jenkins/plugins/echarts-common.jelly 863 2021-03-03 18:04 io/jenkins/plugins/echarts.jelly 3815 2021-03-03 18:04 io/jenkins/plugins/echarts/BuildActionIterator.class 3078 2021-03-03 18:04 io/jenkins/plugins/echarts/AsyncTrendJobAction.class 2209 2021-03-03 18:04 io/jenkins/plugins/echarts/BuildActionIterator$ActionSelector.class 307 2021-03-03 18:04 io/jenkins/plugins/echarts/AsyncTrendChart.class 877 2021-03-03 18:04 io/jenkins/plugins/echarts-simple.jelly 0 2021-03-03 18:04 charts/taglib 1485 2021-03-03 18:04 charts/trend-chart.jelly 1476 2021-03-03 18:04 charts/pie-chart.jelly 1373 2021-03-03 18:04 charts/progress-chart.jelly 0 2021-03-03 18:04 META-INF/maven/ 0 2021-03-03 18:04 META-INF/maven/io.jenkins.plugins/ 0 2021-03-03 18:04 META-INF/maven/io.jenkins.plugins/echarts-api/ 5608 2021-03-03 18:04 META-INF/maven/io.jenkins.plugins/echarts-api/pom.xml 116 2021-03-03 18:04 META-INF/maven/io.jenkins.plugins/echarts-api/pom.properties --------- ------- 70682 48 files
- relates to
-
JENKINS-65766 java.lang.LinkageError: ... attempted duplicate class definition for name: ...
-
- Closed
-
-
JENKINS-64864 LinkageError loader attempted duplicate class definition
-
- Resolved
-
-
JENKINS-65510 attempted duplicate class definition for name: "com/cloudbees/plugins/credentials/CredentialsMatcher$CQL"
-
- Resolved
-
- links to
[JENKINS-65261] Warnings trend chart does not appear; duplicate classes in echarts-api.jar and echarts-build-trends-2.0.0.jar in ECharts API Plugin
In https://updates.jenkins.io/download/plugins/warnings-ng/8.10.1/warnings-ng.hpi, META-INF/MANIFEST.MF has a Plugin-Dependencies field that mentions echarts-api:5.0.1-1. https://updates.jenkins.io/download/plugins/echarts-api/5.0.1-1/echarts-api.hpi contains WEB-INF/lib/echarts-build-trends-2.0.0.jar, which contains edu/hm/hafner/echarts/JacksonFacade.class (which was apparently compiled from https://github.com/uhafner/echarts-build-trends/blob/7c8917f9c186426f153bc5fdcb72896dcdcff714/src/main/java/edu/hm/hafner/echarts/JacksonFacade.java). Why does Jenkins not use that, then?
I upgraded the Jira plugin from 3.2 to 3.2.1 and restarted Jenkins, and now the warnings trend chart is working again. I don't see how the Jira plugin could have caused the problem, though; it doesn't seem to have any dependency on echarts.
I'll resolve this as unreproduceable, and reopen later if the problem recurs.
Now I'm getting a similar NoClassDefFoundError for a different class, edu.hm.hafner.echarts.LineSeries:
huhtikuuta 01, 2021 4:46:54 IP. WARNING org.kohsuke.stapler.HttpResponseRenderer$Default handleJavaScriptProxyMethodCall call to /jenkins/$stapler/bound/02a838ae-0264-490f-9e71-f8b83da48722/getBuildTrendModel failed java.lang.NoClassDefFoundError: edu/hm/hafner/echarts/LineSeries at io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.createSeries(SeverityTrendChart.java:70) at io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.createChartFromDataSet(SeverityTrendChart.java:60) at io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.create(SeverityTrendChart.java:29) at io.jenkins.plugins.analysis.core.model.JobAction.createChartModel(JobAction.java:192) at io.jenkins.plugins.analysis.core.model.JobAction.getBuildTrendModel(JobAction.java:184) at java.lang.invoke.VirtualHandle.invokeExact_thunkArchetype_L(VirtualHandle.java:130) at java.lang.invoke.AsTypeHandle.invokeExact_thunkArchetype_X(AsTypeHandle.java:49) at java.lang.invoke.InvokeGenericHandle.invokeExact_thunkArchetype_X(InvokeGenericHandle.java:88) at java.lang.invoke.SpreadHandle.invokeExact_thunkArchetype_X(SpreadHandle.java:100) at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:485) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145) at org.kohsuke.stapler.MetaClass$JavaScriptProxyMethodDispatcher.doDispatch(MetaClass.java:637) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:834) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694) at org.kohsuke.stapler.Stapler.service(Stapler.java:201) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:791) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:129) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at com.atlassian.bitbucket.jenkins.internal.applink.oauth.serviceprovider.auth.OAuth1aRequestFilter.doFilter(OAuth1aRequestFilter.java:91) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:153) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92) at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:168) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:36) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388) at org.eclipse.jetty.server.HttpChannel$$Lambda$96/000000000000000000.dispatch(Unknown Source) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:279) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036) at java.lang.Thread.run(Thread.java:823)
Script Console however recognizes edu.hm.hafner.echarts.LineSeries just fine.
The output from io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.class.getClassLoader() in Script Console:
Result: AntClassLoader[C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\accessors-smart-1.2.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\antlr4-runtime-4.7.2.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\asm-5.0.4.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\cglib-2.2.2.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\commons-beanutils-1.9.3.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\commons-digester3-3.2.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\eclipse-collections-9.2.0.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\eclipse-collections-api-9.2.0.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\gson-2.8.5.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\j2html-1.4.0.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\jcommander-1.48.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\json-smart-2.3.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\jsoup-1.13.1.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\pmd-core-6.32.0.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\pmd-java-6.32.0.jar;C:\Program Files (x86)\Jenkins\plugins\warnings-ng\WEB-INF\lib\warnings-ng.jar]
This list of jar files does not include "echarts-build-trends-2.0.0.jar", nor anything else from "C:\Program Files (x86)\Jenkins\plugins\echarts-api\WEB-INF\lib".
The output from io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.class.getClassLoader().getParent() in Script Console:
Result: hudson.ClassicPluginStrategy$DependencyClassLoader@b6adfb4a
The output from io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.class.getClassLoader().getParent().getTransitiveDependencies() in Script Console:
Result: [Plugin:plugin-util-api, Plugin:analysis-model-api, Plugin:font-awesome-api, Plugin:jquery3-api, Plugin:popper-api, Plugin:bootstrap4-api, Plugin:structs, Plugin:trilead-api, Plugin:workflow-step-api, Plugin:scm-api, Plugin:workflow-api, Plugin:script-security, Plugin:workflow-support, Plugin:display-url-api, Plugin:checks-api, Plugin:snakeyaml-api, Plugin:jackson2-api, Plugin:data-tables-api, Plugin:echarts-api, Plugin:workflow-scm-step, Plugin:bouncycastle-api, Plugin:command-launcher, Plugin:jdk-tool, Plugin:ace-editor, Plugin:workflow-cps, Plugin:workflow-job, Plugin:configuration-as-code, Plugin:credentials, Plugin:cloudbees-folder, Plugin:branch-api, Plugin:workflow-multibranch, Plugin:forensics-api, Plugin:antisamy-markup-formatter, Plugin:apache-httpcomponents-client-4-api, Plugin:junit, Plugin:matrix-project, Plugin:token-macro]
The output from io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.class.getClassLoader().loadClass("io.jenkins.plugins.analysis.core.charts.SeverityTrendChart") in Script Console:
Result: class io.jenkins.plugins.analysis.core.charts.SeverityTrendChart
The output from io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.class.getClassLoader().loadClass("edu.hm.hafner.echarts.LineSeries") in Script Console:
Result: class edu.hm.hafner.echarts.LineSeries
But the trend chart still does not appear, and I get more of those exceptions in the log.
Hmm, I never had such a problem. The echarts classes are from another plugin, those are not part of a dependency lib and not part of the class loader.
I wonder if this could be some kind of JVM bug or incompatibility. The Jenkins instance is on AdoptOpenJDK 8 OpenJ9 (rather than Hotspot).
After upgrading some plugins and restarting Jenkins, I get a different exception again:
huhtikuuta 06, 2021 6:57:31 IP. WARNING org.kohsuke.stapler.HttpResponseRenderer$Default handleJavaScriptProxyMethodCall call to /jenkins/$stapler/bound/3c62fd8e-88ad-4e61-9a5d-f958078929c5/getBuildTrendModel failed java.lang.LinkageError: edu.hm.hafner.echarts.LineSeries at java.lang.ClassLoader.defineClassImpl(Native Method) at java.lang.ClassLoader.defineClassInternal(ClassLoader.java:398) at java.lang.ClassLoader.defineClass(ClassLoader.java:359) at jenkins.util.AntClassLoader.defineClassFromData(AntClassLoader.java:1155) at hudson.ClassicPluginStrategy$AntClassLoader2.defineClassFromData(ClassicPluginStrategy.java:718) at jenkins.util.AntClassLoader.getClassFromStream(AntClassLoader.java:1326) at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1377) at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1342) at jenkins.ClassLoaderReflectionToolkit._findClass(ClassLoaderReflectionToolkit.java:107) at hudson.ClassicPluginStrategy$DependencyClassLoader.findClass(ClassicPluginStrategy.java:637) at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:953) at java.lang.ClassLoader.loadClass(ClassLoader.java:898) at java.lang.ClassLoader.loadClass(ClassLoader.java:881) at jenkins.util.AntClassLoader.findBaseClass(AntClassLoader.java:1406) at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1085) at java.lang.ClassLoader.loadClass(ClassLoader.java:881) at io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.createSeries(SeverityTrendChart.java:70) at io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.createChartFromDataSet(SeverityTrendChart.java:60) at io.jenkins.plugins.analysis.core.charts.SeverityTrendChart.create(SeverityTrendChart.java:29) at io.jenkins.plugins.analysis.core.model.JobAction.createChartModel(JobAction.java:192) at io.jenkins.plugins.analysis.core.model.JobAction.getBuildTrendModel(JobAction.java:184) at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:485) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145) at org.kohsuke.stapler.MetaClass$JavaScriptProxyMethodDispatcher.doDispatch(MetaClass.java:637) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:834) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694) at org.kohsuke.stapler.Stapler.service(Stapler.java:201) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:791) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:129) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at com.atlassian.bitbucket.jenkins.internal.applink.oauth.serviceprovider.auth.OAuth1aRequestFilter.doFilter(OAuth1aRequestFilter.java:91) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:153) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92) at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:168) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:36) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388) at org.eclipse.jetty.server.HttpChannel$$Lambda$96/000000000000000000.dispatch(Unknown Source) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:279) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036) at java.lang.Thread.run(Thread.java:823)
Versions:
- AdoptOpenJDK jre-8.0.275.1-openj9
- Jenkins 2.277.1
- Warnings Next Generation Plugin 8.10.1
- Analysis Model API Plugin 9.8.1
- Checks API plugin 1.7.0
- DataTables.net API Plugin 1.10.23-3
- ECharts API Plugin 5.0.1-1
- Forensics API Plugin 1.0.0
- Git Forensics Plugin 1.0.0
- Plugin Utilities API Plugin 2.1.0
- Jackson 2 API Plugin 2.12.1
One suspicious thing is that eclipse-collections-9.2.0.jar and eclipse-collections-api-9.2.0.jar exist in five directories: plugins\analysis-model-api\WEB-INF\lib, plugins\echarts-api\WEB-INF\lib, plugins\git-forensics\WEB-INF\lib, plugins\warnings\WEB-INF\lib, and plugins\warnings-ng\WEB-INF\lib. All of those are identical though, and there are no eclipse-collections*.jar files with other version numbers.
(Although the plugins\warnings directory still exists, there is no plugins\warnings.jpi file, and the plugin manager does not list Warnings as an installed plugin.)
In Script Console, Class.forName("edu.hm.hafner.echarts.LineSeries", false, Class.forName("io.jenkins.plugins.analysis.core.charts.SeverityTrendChart").getClassLoader()) returns class edu.hm.hafner.echarts.LineSeries, but Class.forName("io.jenkins.plugins.analysis.core.charts.SeverityTrendChart", false, Class.forName("edu.hm.hafner.echarts.LineSeries").getClassLoader()) throws java.lang.ClassNotFoundException. I think that means I can use expressions like these to check how Jenkins resolves classes referenced by plugins.
Funny that the log has "java.lang.LinkageError: edu.hm.hafner.echarts.LineSeries" with dots but "java.lang.NoClassDefFoundError: edu/hm/hafner/echarts/LineSeries" with slashes.
Upgraded to AdoptOpenJDK jre-8.0.282.8-openj9. The warnings trend chart then rendered OK, but the test results trend chart didn't, and there was a different exception:
huhtikuuta 06, 2021 11:22:49 IP. WARNING org.kohsuke.stapler.HttpResponseRenderer$Default handleJavaScriptProxyMethodCall call to /jenkins/$stapler/bound/10bffabb-1439-4232-afdb-b5b50105e6e8/getBuildTrendModel failed java.lang.LinkageError: A duplicate class definition for edu/hm/hafner/echarts/JacksonFacade is found at java.lang.ClassLoader.defineClassImpl(Native Method) at java.lang.ClassLoader.defineClassInternal(ClassLoader.java:398) at java.lang.ClassLoader.defineClass(ClassLoader.java:359) at jenkins.util.AntClassLoader.defineClassFromData(AntClassLoader.java:1155) at hudson.ClassicPluginStrategy$AntClassLoader2.defineClassFromData(ClassicPluginStrategy.java:718) at jenkins.util.AntClassLoader.getClassFromStream(AntClassLoader.java:1326) at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1377) at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1342) at jenkins.ClassLoaderReflectionToolkit._findClass(ClassLoaderReflectionToolkit.java:107) at hudson.ClassicPluginStrategy$DependencyClassLoader.findClass(ClassicPluginStrategy.java:637) at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:953) at java.lang.ClassLoader.loadClass(ClassLoader.java:898) at java.lang.ClassLoader.loadClass(ClassLoader.java:881) at jenkins.util.AntClassLoader.findBaseClass(AntClassLoader.java:1406) at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1085) at java.lang.ClassLoader.loadClass(ClassLoader.java:881) at hudson.tasks.test.TestResultProjectAction.getBuildTrendModel(TestResultProjectAction.java:214) at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:473) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145) at org.kohsuke.stapler.MetaClass$JavaScriptProxyMethodDispatcher.doDispatch(MetaClass.java:637) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:834) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694) at org.kohsuke.stapler.Stapler.service(Stapler.java:201) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:791) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:129) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at com.atlassian.bitbucket.jenkins.internal.applink.oauth.serviceprovider.auth.OAuth1aRequestFilter.doFilter(OAuth1aRequestFilter.java:91) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:153) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92) at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:168) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:36) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388) at org.eclipse.jetty.server.HttpChannel$$Lambda$275/0x0000000000000000.dispatch(Unknown Source) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:279) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036) at java.lang.Thread.run(Thread.java:823)
Switched from OpenJ9 to AdoptOpenJDK jre-8.0.282.8-hotspot. The warnings trend chart again fails to load. This time, the exception shows the class loader type as well:
huhtikuuta 06, 2021 11:35:59 IP. WARNING org.kohsuke.stapler.HttpResponseRenderer$Default handleJavaScriptProxyMethodCall call to /jenkins/$stapler/bound/491743c3-0b79-4a47-97c0-7cf8c11471e1/getBuildTrendModel failed java.lang.LinkageError: loader (instance of hudson/ClassicPluginStrategy$AntClassLoader2): attempted duplicate class definition for name: "edu/hm/hafner/echarts/JacksonFacade" at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:756) at jenkins.util.AntClassLoader.defineClassFromData(AntClassLoader.java:1155) at hudson.ClassicPluginStrategy$AntClassLoader2.defineClassFromData(ClassicPluginStrategy.java:718) at jenkins.util.AntClassLoader.getClassFromStream(AntClassLoader.java:1326) at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1377) at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1342) at jenkins.ClassLoaderReflectionToolkit._findClass(ClassLoaderReflectionToolkit.java:107) at hudson.ClassicPluginStrategy$DependencyClassLoader.findClass(ClassicPluginStrategy.java:637) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at jenkins.util.AntClassLoader.findBaseClass(AntClassLoader.java:1406) at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1085) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at io.jenkins.plugins.analysis.core.model.JobAction.getBuildTrendModel(JobAction.java:184) at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145) at org.kohsuke.stapler.MetaClass$JavaScriptProxyMethodDispatcher.doDispatch(MetaClass.java:637) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:834) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694) at org.kohsuke.stapler.Stapler.service(Stapler.java:201) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:791) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:129) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at com.atlassian.bitbucket.jenkins.internal.applink.oauth.serviceprovider.auth.OAuth1aRequestFilter.doFilter(OAuth1aRequestFilter.java:91) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:153) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92) at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:168) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:36) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:279) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036) at java.lang.Thread.run(Thread.java:748)
I can also trigger this "duplicate class definition" exception by running in the script console:
Jenkins.get().getItemByFullName("REDACTED/master").getAction(io.jenkins.plugins.analysis.core.model.JobAction.class).getBuildTrendModel()
Huh, edu/hm/hafner/echarts/LineSeries.class and edu/hm/hafner/echarts/JacksonFacade.class exist in both plugins/echarts-api/WEB-INF/lib/echarts-api.jar and plugins/echarts-api/WEB-INF/lib/echarts-build-trends-2.0.0.jar. And those jar files are identical to what is embedded in plugins/echarts-api.jpi (ECharts API Plugin 5.0.1-1). So this seems to be a bug in that plugin then. I'll reopen and retitle.
Downgraded Warnings Next Generation to 8.10.0 and ECharts API to 4.9.0-4. Now both trend charts (warnings and tests) render OK, and there are no exceptions in the log.
Thanks for spotting. This error (forgotten <scope>provided</scope>) is existing since the beginning of the plugin... Maybe sometimes it works.
I imagine it could be a race condition that depends on the timing of HTTP requests after Jenkins is restarted.
If your PR #115 fixes the chart rendering problems, then I should perhaps file a few feature requests in core to make similar problems easier to understand in the future:
- If a java.lang.LinkageError is thrown from a class loader, then log more details about the error: the names of the plugins and jar files that the class loaders are using, and if a class with the same name has already been loaded, then also the plugin and jar in which that one was defined.
(Too bad that Java 8 does not support named class loaders.) - When a plugin is being built, check for duplicate classes in the jar files that will be be packaged in the same jpi file.
I just experienced the same
Apr 15, 2021 8:53:52 AM WARNING hudson.init.impl.InstallUncaughtExceptionHandler handleException Caught unhandled exception with ID 57982552-824d-4e12-a402-b7dff9d949ae java.lang.LinkageError: loader (instance of hudson/ClassicPluginStrategy$AntClassLoader2): attempted duplicate class definition for name: "edu/hm/hafner/echarts/JacksonFacade" at hudson.tasks.test.TestResultProjectAction.getBuildTrendModel(TestResultProjectAction.java:214) at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145) at org.kohsuke.stapler.MetaClass$JavaScriptProxyMethodDispatcher.doDispatch(MetaClass.java:637) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) Caused: javax.servlet.ServletException at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:816) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:834) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694) at org.kohsuke.stapler.Stapler.service(Stapler.java:201) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:791) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:248) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:129) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:60) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:153) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92) at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:168) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:36) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:279) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036) at java.lang.Thread.run(Thread.java:748)
All installed plugins are of the current latest version, including `ECharts API Plugin 5.0.2-1`
In the UI it's triggered by rendering the trends chart which shows the xunit chart.
zerkms, what files do you have in the "plugins/echarts-api/WEB-INF/lib" directory in the Jenkins controller? I see these with echarts-api 5.0.2-1:
$ sha256sum * 6173bfee124364d356a3f1c7d49f6acc25883a6fb9a5ccddd83ef8c0b7c2c7a5 *echarts-api.jar e9a6e0c786435142274cd319c285b634e8b7492e2ad0ef2ea30802f440d8dbb7 *eclipse-collections-9.2.0.jar 51b8d355c6a158286af8e326709cacebea881f51670cb9be99495ab4715dfac3 *eclipse-collections-api-9.2.0.jar
i.e. echarts-build-trends-2.0.0.jar is no longer included. Perhaps you have a stray file there for some reason.
Also, did you restart Jenkins after you upgraded the echarts-api plugin? Perhaps the classes loaded from the previously installed version are still in memory.
I have the same files
jenkins@jenkins-59f6b58798-z4r8z:~/plugins/echarts-api/WEB-INF/lib$ ls -la total 11036 drwxrwsr-x 2 jenkins jenkins 4096 Apr 8 06:56 . drwxrwsr-x 3 jenkins jenkins 4096 Apr 8 06:56 .. -rw-rw-r-- 1 jenkins jenkins 35954 Apr 7 14:25 echarts-api.jar -rw-rw-r-- 1 jenkins jenkins 10019815 Dec 5 2018 eclipse-collections-9.2.0.jar -rw-rw-r-- 1 jenkins jenkins 1231986 Dec 5 2018 eclipse-collections-api-9.2.0.jar
But it looks like you were right: this instance runs in kubernetes, and after plugins are updated - it performs the "restart" but apparently it's some sort of "soft" restart (not sure about the proper terminology), when the main jenkins process does not fully unload from memory, but instead simply reinitialises its resources.
Nevertheless, fully shutting down and restarting a jenkins process (effectively - killing the pod) helped, thanks a lot!
Okay, it's back. So it looks like it's a race condition somewhere indeed.
```
Caught unhandled exception with ID 8d917e05-24b4-42aa-97ee-78ead60cb474
java.lang.LinkageError: loader (instance of hudson/ClassicPluginStrategy$AntClassLoader2): attempted duplicate class definition for name: "edu/hm/hafner/echarts/JacksonFacade"
```
Nothing was upgraded, just the jenkins was restarted (the host machine needed to be shut down temporarily).
PS: and in last comment I copied the wrong command line output, my hashes matched.
Hmm, this class is just available once (since the release https://github.com/jenkinsci/echarts-api-plugin/releases/tag/v5.0.2-1).
Might be a race condition in the Jenkins core instead, although then I'd expect the same error to occur with other classes as well.
zerkms, which JVM are you using?
I'm using the official `jenkins/jenkins:2.277.3` docker image (lts), which is
```
$ java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.282-b08, mixed mode)
```
I upgraded to Jenkins 2.277.4 and the latest plugins, and now I get the error again.
toukokuuta 06, 2021 12:55:26 IP. WARNING hudson.init.impl.InstallUncaughtExceptionHandler handleException Caught unhandled exception with ID 5362ae1b-cdfb-4a4d-90be-1569d749adb1 java.lang.LinkageError: loader (instance of hudson/ClassicPluginStrategy$AntClassLoader2): attempted duplicate class definition for name: "edu/hm/hafner/echarts/JacksonFacade" at hudson.tasks.test.TestResultProjectAction.getBuildTrendModel(TestResultProjectAction.java:214) at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145) at org.kohsuke.stapler.MetaClass$JavaScriptProxyMethodDispatcher.doDispatch(MetaClass.java:637) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)
However, "grep -l -r JacksonFacade plugins" on the Jenkins controller finds only:
- plugins/echarts-api/WEB-INF/lib/echarts-api.jar
i.e. the class is not defined in more than one JAR file. I think I'll file a separate bug on Jenkins core, then.
Oh, there are already two open issues with "duplicate class definition":
JENKINS-64864attempted duplicate class definition for name: "org/apache/commons/lang3/StringUtils"JENKINS-65510attempted duplicate class definition for name: "com/cloudbees/plugins/credentials/CredentialsMatcher$CQL"
and three that I think are not related, because they involve CpsGroovyShell$CleanGroovyClassLoader rather than ClassicPluginStrategy$AntClassLoader2:
- JENKINS-52907 attempted duplicate class definition for name: "lib/lib"
- JENKINS-48628 attempted duplicate class definition for name: "com/example/jenkins/testcase/function"
- JENKINS-49122 attempted duplicate class definition for name: "Github"
I restarted Jenkins and first navigated to a project that collects warnings but does not run any tests, and thus has only one graph. That loaded OK. I then navigated to a project that has graphs for warnings and test results, and both graphs loaded OK. I think this sequence of requests avoided the race condition.
I think it would make sense to report it in a way that the core team will see it. Otherwise plugin developers (like me) simply will do nothing because the error looks to be caused by something unrelated.
JENKINS-65766 was fixed in core. I hope "duplicate class definition" will no longer occur, then.
io.jenkins.plugins.analysis.core.model.JobAction.getBuildTrendModel(JobAction.java:184) seems to be here: https://github.com/jenkinsci/warnings-ng-plugin/blob/16468bc099227b0c17ddbab5b22e83066a807052/plugin/src/main/java/io/jenkins/plugins/analysis/core/model/JobAction.java#L181-L185
However, I don't see which Jenkins plugin is supposed to define edu.hm.hafner.echarts.JacksonFacade.