-
Bug
-
Resolution: Fixed
-
Minor
-
JDK 9, Jenkins 2.60.3 as described in my lts-with-plugins docker instance
While exploring Jenkins 2.60.3 on Oracle Java 9 build 181 (pre-release), it reports illegal access exceptions and warns that a future release of Java 9 will forbid illegal access.
A partial stack trace shows:
WARNING: Illegal reflective access by jenkins.ClassLoaderReflectionToolkit (file:/var/jenkins_home/war/WEB-INF/lib/jenkins-core-2.60.3.jar) to method java.lang.ClassLoader.findClass(java.lang.String) at jenkins.ClassLoaderReflectionToolkit.<clinit>(ClassLoaderReflectionToolkit.java:22) at hudson.ClassicPluginStrategy$DependencyClassLoader.findClass(ClassicPluginStrategy.java:762) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at jenkins.util.AntClassLoader.findBaseClass(AntClassLoader.java:1393) at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1076) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at hudson.ClassicPluginStrategy.load(ClassicPluginStrategy.java:506) at hudson.PluginManager$2$1$1.run(PluginManager.java:517) at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282) at jenkins.model.Jenkins$7.runTask(Jenkins.java:1090) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.base/java.lang.Thread.run(Thread.java:844)
- relates to
-
JENKINS-64423 [jdk11] Illegal reflective access by jenkins.ClassLoaderReflectionToolkit
-
- Resolved
-
-
JENKINS-65766 java.lang.LinkageError: ... attempted duplicate class definition for name: ...
-
- Closed
-
[JENKINS-46618] [JDK9] Illegal reflective access from jenkins core
Epic Link |
New:
|
Description |
Original:
While exploring Jenkins 2.60.3 on Oracle Java 9 build 181 (pre-release), it reports illegal access exceptions and warns that a future release of Java 9 will forbid illegal access. A partial stack trace shows: {noformat} WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/var/jenkins_home/war/WEB-INF/lib/groovy-all-2.4.8.jar) to method java.lang.reflect.Proxy.checkNewProxyPermission(java.lang.Class,java.lang.Class) at org.codehaus.groovy.reflection.CachedClass.makeAccessible(CachedClass.java:84) at org.codehaus.groovy.reflection.CachedClass.access$000(CachedClass.java:42) at org.codehaus.groovy.reflection.CachedClass$3$1.run(CachedClass.java:109) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:105) at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:102) at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49) at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36) at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:274) at groovy.lang.MetaClassImpl.populateMethods(MetaClassImpl.java:367) at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:346) at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3286) at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:271) at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:313) at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:258) at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:883) at org.kohsuke.stapler.jelly.groovy.Namespace.createInvoker(Namespace.java:74) at org.kohsuke.stapler.jelly.groovy.JellyBuilder.namespace(JellyBuilder.java:125) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1218) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:815) at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:46) at org.kohsuke.stapler.jelly.groovy.GroovyClosureScript.invokeMethod(GroovyClosureScript.java:87) at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:75) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166) at jenkins.widgets.BuildQueueWidget.index.run(index.groovy:3) at org.kohsuke.stapler.jelly.groovy.GroovierJellyScript.run(GroovierJellyScript.java:74) at org.kohsuke.stapler.jelly.groovy.GroovierJellyScript.run(GroovierJellyScript.java:62) {noformat} The stack trace seems to appear any time I try to run a pipeline job, and any time |
New:
While exploring Jenkins 2.60.3 on Oracle Java 9 build 181 (pre-release), it reports illegal access exceptions and warns that a future release of Java 9 will forbid illegal access. A partial stack trace shows: {noformat} WARNING: Illegal reflective access by jenkins.ClassLoaderReflectionToolkit (file:/var/jenkins_home/war/WEB-INF/lib/jenkins-core-2.60.3.jar) to method java.lang.ClassLoader.findClass(java.lang.String) at jenkins.ClassLoaderReflectionToolkit.<clinit>(ClassLoaderReflectionToolkit.java:22) at hudson.ClassicPluginStrategy$DependencyClassLoader.findClass(ClassicPluginStrategy.java:762) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at jenkins.util.AntClassLoader.findBaseClass(AntClassLoader.java:1393) at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1076) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at hudson.ClassicPluginStrategy.load(ClassicPluginStrategy.java:506) at hudson.PluginManager$2$1$1.run(PluginManager.java:517) at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282) at jenkins.model.Jenkins$7.runTask(Jenkins.java:1090) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.base/java.lang.Thread.run(Thread.java:844) {noformat} |
Summary | Original: JDK9] Illegal reflective access from jenkins core | New: [JDK9] Illegal reflective access from jenkins core |
Labels | New: java10_hackathon newbie-friendly |
Labels | Original: java10_hackathon newbie-friendly | New: java10_hackathon java11 newbie-friendly |
Labels | Original: java10_hackathon java11 newbie-friendly | New: illegalReflectiveAccess java10_hackathon java11 newbie-friendly |
Labels | Original: illegalReflectiveAccess java10_hackathon java11 newbie-friendly | New: illegalReflectiveAccess java10_hackathon java11 newbie-friendly triaged |
This whole thing has been introduced by https://github.com/jenkinsci/jenkins/commit/ee4e9c61491e89e7879337279bc58f85eb9048d1#diff-6fcbca8847b7ec9ab582a1a7e253a34a
Unfortunately hack-ish and hard for us to find an alternative implementation.
ALL calls to ClassLoaderReflectionToolkit come with alternative classic approach based on PluginManager.FAST_LOOKUP flag. So maybe simpler|safer to just remove this whole thing ? Not sure how "faster" this hack is vs plain classloader (especially if we consider the target classes will be loaded at some point, won't they ?)