问题
In Jenkins Pipeline we have a CpsGroovyScript executed by CPSGroovyShell with a custom classpath which is appended with path to Global Library location.
In order to be able to test my changes before making them available for all the Pipelines on my Jenkins instance I want to override classpath by unloading the classes and modifying the script's classpath from itself in runtime.
My idea is to prepend current classpath with a new location so that changed classes found first. this.class.classLoader.addURL()
is great but the new path goes to the end of classpath.
.../src
- this is root of current production code, it's in classpath by default
.../branch-src
- this is root of my changed code, I want it to be used instead of .../src
For instance I want class .../src/com/foo/Bar.groovy
to be overridden by .../branch-src/com/foo/Bar.groovy
when I call import com.foo.Bar
or new com.foo.Bar()
If this can't work at all is there any other hack, i.e. to completely replace original classpath, or to replace the whole classloader, whatever.
来源:https://stackoverflow.com/questions/35637833/replace-classpath-of-a-running-groovy-script-jenkins-pipeline-script