-
Bug
-
Resolution: Unresolved
-
Major
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin.
Example.
Imagine a custom jar has a dependency on any of spring core components, ex `spring-context`
com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE
And let's Imagine a groovy function inside a shared library.
@Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() }
When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError.
That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under
$JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar
Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading the correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of cloud bees forum ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars.
Is there any known workaround, or possible fix to issue?
[JENKINS-59410] any dependency to spring is causing version conflict between shared libraries and jdk-tools plugin spring 2.5X
Component/s | New: pipeline [ 21692 ] |
Description |
Original:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` 'com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE` And lets Imagine a groovy function inside a shared library. `doSomething.groovy` ``` @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } ``` When `doSomething()` is being called from `Jenkinsfile`, everything constantly crashes with `java.lang.NoSuchMethodError`. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under `$JENKINS_HOME/war/WEB_INF/lib/spring-*2.5.6.jar` Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
New:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {noformat} doSomething.groovy{noformat} {code:java} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
Description |
Original:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {noformat} doSomething.groovy{noformat} {code:java} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
New:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {noformat} doSomething.groovy{noformat} {code:java} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} [link title|http://example.com] Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
Description |
Original:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {noformat} doSomething.groovy{noformat} {code:java} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} [link title|http://example.com] Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
New:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {noformat} doSomething.groovy{noformat} {code:java} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloud bees forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
Description |
Original:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {noformat} doSomething.groovy{noformat} {code:java} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloud bees forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
New:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {code:java} {code:title=doSomething.groovy|borderStyle=solid} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. [cloud bees forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum| [https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
Description |
Original:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE{noformat} And let's Imagine a groovy function inside a shared library. {code:java} {code:title=doSomething.groovy|borderStyle=solid} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. [cloud bees forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum| [https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
New:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE {noformat} And let's Imagine a groovy function inside a shared library. {code:title=doSomething.groovy|borderStyle=solid} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. [cloud bees forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum| [https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
Description |
Original:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE {noformat} And let's Imagine a groovy function inside a shared library. {code:title=doSomething.groovy|borderStyle=solid} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. [cloud bees forum|[https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloudbees-forum| [https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-]] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
New:
If the shared library, has a transitive dependency to spring core, it is conflicting with spring jars coming from `jdk-tool` plugin. Example. Imagine a custom jar has a dependency on any of spring core components, ex `spring-context` {noformat} com.company.component:library:1.0' --> `org.springframework:spring-context:4.3.8.RELEASE {noformat} And let's Imagine a groovy function inside a shared library. {code:title=doSomething.groovy|borderStyle=solid} @Grab('com.company.component:library:1.0') import com.company.component.SomeClass def call() { return SomeClass.doSomething() } {code} When doSomething() is being called from Jenkinsfile, everything constantly crashes with java.lang.NoSuchMethodError. That is because, instead of loading transitive dependencies for spring `4.3.8.RELEASE`, a classloader is loading an old `2.5.6` version of spring classes from `jdk-tool` plugin under {noformat} $JENKINS_HOME/war/WEB-INF/lib/spring-*2.5.6.jar{noformat} Apparently, at the time of method execution, classloader is confused because `jdk-tool` plugin is loaded by default with old spring version. I do see grape downloading the correct version of jars to $JENKINS_HOME/.groovy. However, after some debug prints ( with help of [cloud bees forum|https://support.cloudbees.com/hc/en-us/articles/360004592631-What-Plugin-is-providing-this-class-] ), it is visible that the classloader is ignoring the version there, and is loading from jdk-tools plugin's jars. Is there any known workaround, or possible fix to issue? |
Summary | Original: any transitive dependency to spring, causing version conflict between shared libraries and jdk-tools plugin | New: any dependency to spring is causing version conflict between shared libraries and jdk-tools plugin spring 2.5X |