@@ -188,50 +188,43 @@ public Class<?> compile(String script) throws ScriptException {
188
188
File file = path == null ? null : new File (path );
189
189
190
190
final Writer writer = getContext ().getErrorWriter ();
191
+ final Builder builder = new Builder ();
191
192
try {
192
-
193
- final Builder builder ;
194
-
195
193
if (file != null && file .exists ()) {
196
194
// if the filename set in engine scope bindings is valid,
197
195
// ignore the given script and use that file instead.
198
- builder = new Builder (file , writer );
196
+ builder . initialize (file , writer );
199
197
}
200
198
else {
201
199
// script may be null, but then we cannot create a StringReader for it,
202
200
// therefore null is passed if script is null.
203
201
final Reader reader =
204
202
(script == null ) ? null : new StringReader (script );
205
- builder = new Builder (reader , writer );
203
+ builder . initialize (reader , writer );
206
204
}
207
205
final MavenProject project = builder .project ;
208
206
String mainClass = builder .mainClass ;
209
207
210
- try {
211
- project .build (true );
208
+ project .build (true );
209
+ if (mainClass == null ) {
210
+ mainClass = project .getMainClass ();
212
211
if (mainClass == null ) {
213
- mainClass = project .getMainClass ();
214
- if (mainClass == null ) {
215
- throw new ScriptException ("No main class found for file " + file );
216
- }
212
+ throw new ScriptException ("No main class found for file " + file );
217
213
}
214
+ }
218
215
219
- // make class loader
220
- String [] paths = project .getClassPath (false ).split (File .pathSeparator );
221
- URL [] urls = new URL [paths .length ];
222
- for (int i = 0 ; i < urls .length ; i ++)
223
- urls [i ] =
224
- new URL ("file:" + paths [i ] + (paths [i ].endsWith (".jar" ) ? "" : "/" ));
216
+ // make class loader
217
+ String [] paths = project .getClassPath (false ).split (File .pathSeparator );
218
+ URL [] urls = new URL [paths .length ];
219
+ for (int i = 0 ; i < urls .length ; i ++)
220
+ urls [i ] =
221
+ new URL ("file:" + paths [i ] + (paths [i ].endsWith (".jar" ) ? "" : "/" ));
225
222
226
- final URLClassLoader classLoader = new URLClassLoader (urls , Thread .currentThread ()
227
- .getContextClassLoader ());
223
+ final URLClassLoader classLoader = new URLClassLoader (urls , Thread .currentThread ()
224
+ .getContextClassLoader ());
228
225
229
- // load main class
230
- return classLoader .loadClass (mainClass );
231
- }
232
- finally {
233
- builder .cleanup ();
234
- }
226
+ // load main class
227
+ return classLoader .loadClass (mainClass );
235
228
}
236
229
catch (Exception e ) {
237
230
if (writer != null ) {
@@ -244,6 +237,9 @@ public Class<?> compile(String script) throws ScriptException {
244
237
throw new ScriptException (e );
245
238
}
246
239
}
240
+ finally {
241
+ builder .cleanup ();
242
+ }
247
243
return null ;
248
244
}
249
245
@@ -292,20 +288,19 @@ public void compile(final File file) {
292
288
* @see #compile(String)
293
289
*/
294
290
public void compile (final File file , final Writer errorWriter ) {
291
+ final Writer writer =
292
+ (errorWriter == null ) ? getContext ().getErrorWriter () : errorWriter ;
293
+ final Builder builder = new Builder ();
295
294
try {
296
- final Writer writer =
297
- (errorWriter == null ) ? getContext ().getErrorWriter () : errorWriter ;
298
- final Builder builder = new Builder (file , writer );
299
- try {
300
- builder .project .build ();
301
- }
302
- finally {
303
- builder .cleanup ();
304
- }
295
+ builder .initialize (file , writer );
296
+ builder .project .build ();
305
297
}
306
298
catch (Throwable t ) {
307
299
printOrThrow (t , errorWriter );
308
300
}
301
+ finally {
302
+ builder .cleanup ();
303
+ }
309
304
}
310
305
311
306
/**
@@ -319,22 +314,21 @@ public void compile(final File file, final Writer errorWriter) {
319
314
public void makeJar (final File file , final boolean includeSources ,
320
315
final File output , final Writer errorWriter )
321
316
{
317
+ final Builder builder = new Builder ();
322
318
try {
323
- final Builder builder = new Builder (file , errorWriter );
324
- try {
325
- builder .project .build (true , true , includeSources );
326
- final File target = builder .project .getTarget ();
327
- if (output != null && !target .equals (output )) {
328
- BuildEnvironment .copyFile (target , output );
329
- }
330
- }
331
- finally {
332
- builder .cleanup ();
319
+ builder .initialize (file , errorWriter );
320
+ builder .project .build (true , true , includeSources );
321
+ final File target = builder .project .getTarget ();
322
+ if (output != null && !target .equals (output )) {
323
+ BuildEnvironment .copyFile (target , output );
333
324
}
334
325
}
335
326
catch (Throwable t ) {
336
327
printOrThrow (t , errorWriter );
337
328
}
329
+ finally {
330
+ builder .cleanup ();
331
+ }
338
332
}
339
333
340
334
/**
@@ -368,14 +362,17 @@ private void printOrThrow(Throwable t, Writer errorWriter) {
368
362
*/
369
363
private class Builder {
370
364
371
- private final PrintStream err ;
372
- private final File temporaryDirectory ;
365
+ private PrintStream err ;
366
+ private File temporaryDirectory ;
373
367
private String mainClass ;
374
368
private MavenProject project ;
375
369
376
370
/**
377
371
* Constructs a wrapper around a possibly project for a source or maven
378
372
* project file.
373
+ * <p>
374
+ * This method is intended to be called only once.
375
+ * </p>
379
376
*
380
377
* @param file the {@code .java} file to build (or null, if {@code reader}
381
378
* is set).
@@ -388,7 +385,7 @@ private class Builder {
388
385
* @throws TransformerException
389
386
* @throws TransformerFactoryConfigurationError
390
387
*/
391
- private Builder (final File file , final Writer errorWriter )
388
+ private void initialize (final File file , final Writer errorWriter )
392
389
throws ScriptException , IOException , ParserConfigurationException ,
393
390
SAXException , TransformerConfigurationException , TransformerException ,
394
391
TransformerFactoryConfigurationError
@@ -411,6 +408,9 @@ private Builder(final File file, final Writer errorWriter)
411
408
/**
412
409
* Constructs a wrapper around a possibly temporary project for source code
413
410
* generated by a Reader.
411
+ * <p>
412
+ * This method is intended to be called only once.
413
+ * </p>
414
414
*
415
415
* @param reader provides the Java source if {@code file} is {@code null}
416
416
* @param errorWriter where to write the error output.
@@ -422,7 +422,7 @@ private Builder(final File file, final Writer errorWriter)
422
422
* @throws TransformerException
423
423
* @throws TransformerFactoryConfigurationError
424
424
*/
425
- private Builder (final Reader reader , final Writer errorWriter )
425
+ private void initialize (final Reader reader , final Writer errorWriter )
426
426
throws ScriptException , IOException , ParserConfigurationException ,
427
427
SAXException , TransformerConfigurationException , TransformerException ,
428
428
TransformerFactoryConfigurationError
0 commit comments