@@ -43,17 +43,30 @@ class DslScriptLoader {
4343
4444 // Otherwise baseScript won't take effect
4545 GroovyClassLoader groovyClassLoader = new GroovyClassLoader (parentClassLoader, config)
46- GroovyScriptEngine engine
46+
4747 try {
48- URL [] urlRoots = scriptRequests* . urlRoots. flatten(). unique()
49- engine = new GroovyScriptEngine (urlRoots, groovyClassLoader)
50- engine. config = config
48+ runScriptsWithClassLoader(scriptRequests, groovyClassLoader, config)
49+ } finally {
50+ if (groovyClassLoader instanceof Closeable ) {
51+ ((Closeable ) groovyClassLoader). close()
52+ }
53+ }
54+ }
5155
52- Binding binding = createBinding()
56+ private GeneratedItems runScriptsWithClassLoader (Collection<ScriptRequest > scriptRequests ,
57+ GroovyClassLoader groovyClassLoader ,
58+ CompilerConfiguration config ) {
59+ GeneratedItems generatedItems = new GeneratedItems ()
5360
54- GeneratedItems generatedItems = new GeneratedItems ()
55- scriptRequests. each { ScriptRequest scriptRequest ->
56- JobParent jobParent = runScript(scriptRequest, engine, binding)
61+ // group requests that share the same classpath
62+ scriptRequests. groupBy { it. urlRoots* . toString(). sort() }. values(). each { List<ScriptRequest > requestSet ->
63+ GroovyScriptEngine engine
64+ try {
65+ engine = new GroovyScriptEngine (requestSet. first(). urlRoots, groovyClassLoader)
66+ engine. config = config
67+
68+ requestSet. each { ScriptRequest scriptRequest ->
69+ JobParent jobParent = runScript(scriptRequest, engine)
5770
5871 boolean ignoreExisting = scriptRequest. ignoreExisting
5972 generatedItems. configFiles. addAll(extractGeneratedConfigFiles(jobParent, ignoreExisting))
@@ -64,19 +77,19 @@ class DslScriptLoader {
6477 scheduleJobsToRun(jobParent. queueToBuild)
6578 }
6679
67- return generatedItems
68- } finally {
69- if (engine?. groovyClassLoader instanceof Closeable ) {
70- ((Closeable ) engine. groovyClassLoader). close()
71- }
72- if (groovyClassLoader instanceof Closeable ) {
73- ((Closeable ) groovyClassLoader). close()
80+ } finally {
81+ if (engine?. groovyClassLoader instanceof Closeable ) {
82+ ((Closeable ) engine. groovyClassLoader). close()
83+ }
7484 }
7585 }
86+ generatedItems
7687 }
7788
78- private JobParent runScript (ScriptRequest scriptRequest , GroovyScriptEngine engine , Binding binding ) {
89+ private JobParent runScript (ScriptRequest scriptRequest , GroovyScriptEngine engine ) {
7990 LOGGER . log(Level . FINE , String . format(" Request for ${ scriptRequest.location} " ))
91+
92+ Binding binding = createBinding()
8093 try {
8194 Script script
8295 if (scriptRequest. body != null ) {
0 commit comments