-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
Jenkins 2.361.4
Pipeline Utility Steps Version 2.13.2
This ticket intends to regroup different issues about the same root cause: because of Jenkins plugin classloader isolation, we cannot create instance of plugin Classes, unless we do reflectivity.
https://issues.jenkins.io/browse/JENKINS-40432
https://issues.jenkins.io/browse/JENKINS-48052
https://issues.jenkins.io/browse/JENKINS-56975
have the same root cause.
How to reproduce the issue:
Create a pipeline job with this content:
node {
writeFile(file: "pom.xml", text: "<project></project >")
pom = readMavenPom(file: 'pom.xml')
dep = new Dependency()
dep.setArtifactId("artifactId")
pom.addDependency(dep)
}
Current behavior:
The job is in error:
hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: org.apache.maven.model.Model.addDependency() is applicable for argument types: (org.apache.maven.model.Dependency) values: [Dependency {groupId=null, artifactId=artifactId, version=null, type=jar}]
Possible solutions: addDependency(org.apache.maven.model.Dependency)
The following classes appear as argument class and as parameter class, but are defined by different class loader:
org.apache.maven.model.Dependency (defined by 'jenkins.util.URLClassLoader2@a0eb06d' and 'jenkins.util.URLClassLoader2@47f54404')
If one of the method suggestions matches the method you wanted to call,
then check your class loader setup.
Expected content:
Job in success.
Cause:
The Dependency in main classloader is not instantiated from the same Class as in the plugin classloader.
Workaround:
node {
writeFile(file: "pom.xml", text: "<project></project >")
pom = readMavenPom(file: 'pom.xml')
//dep = new Dependency()
dep = pom.&addDependency.parameterTypes[0].newInstance()
dep.setArtifactId("artifactId")
pom.addDependency(dep)
}
This does reflectivity and creates a new instance from the Class of plugin classloader. However this cause a security alert and we need to approve some methods like newInstance() on Jenkins security board.
- is duplicated by
-
JENKINS-40514 Typing Return Value of readMavenPom Causes ClassCastException
-
- Open
-