1 package org.codehaus.gmavenplus.util;
2
3 import org.apache.maven.plugin.logging.Log;
4 import org.apache.maven.plugin.logging.SystemStreamLog;
5 import org.codehaus.gmavenplus.model.GroovyCompileConfiguration;
6 import org.codehaus.gmavenplus.model.GroovyDocConfiguration;
7 import org.codehaus.gmavenplus.model.GroovyStubConfiguration;
8
9 import java.io.IOException;
10 import java.io.ObjectInputStream;
11 import java.nio.file.Files;
12 import java.nio.file.Paths;
13 import java.util.Collections;
14 import java.util.List;
15
16
17
18
19
20
21 public class ForkedGroovyCompiler {
22
23 public static void main(String[] args) {
24 if (args.length != 1) {
25 System.err.println("Usage: java " + ForkedGroovyCompiler.class.getName() + " <configuration-file>");
26 System.exit(1);
27 }
28
29 String configFilePath = args[0];
30 try (ObjectInputStream ois = new ObjectInputStream(Files.newInputStream(Paths.get(configFilePath)))) {
31 Object configuration = ois.readObject();
32 Log log = new SystemStreamLog();
33
34 List<?> classpath = Collections.emptyList();
35 org.codehaus.gmavenplus.model.IncludeClasspath includeClasspath = null;
36
37 if (configuration instanceof GroovyCompileConfiguration) {
38 classpath = ((GroovyCompileConfiguration) configuration).getClasspath();
39 includeClasspath = ((GroovyCompileConfiguration) configuration).getIncludeClasspath();
40 } else if (configuration instanceof GroovyStubConfiguration) {
41 classpath = ((GroovyStubConfiguration) configuration).getClasspath();
42 includeClasspath = ((GroovyStubConfiguration) configuration).getIncludeClasspath();
43 } else if (configuration instanceof GroovyDocConfiguration) {
44 classpath = ((GroovyDocConfiguration) configuration).getClasspath();
45 includeClasspath = ((GroovyDocConfiguration) configuration).getIncludeClasspath();
46 }
47
48 ClassLoader parent = ClassLoader.getSystemClassLoader();
49 if (includeClasspath != null && includeClasspath.name().equals("PROJECT_ONLY")) {
50 try {
51 java.lang.reflect.Method getPlatformClassLoader = ClassLoader.class.getMethod("getPlatformClassLoader");
52 parent = (ClassLoader) getPlatformClassLoader.invoke(null);
53 } catch (Exception e) {
54 parent = null;
55 }
56 }
57
58 List<?> finalClasspath = classpath != null ? classpath : Collections.emptyList();
59 if (includeClasspath != null && includeClasspath.name().equals("PLUGIN_ONLY")) {
60 finalClasspath = Collections.emptyList();
61 }
62
63 ClassWrangler classWrangler = new ClassWrangler(finalClasspath, parent, log);
64 GroovyCompiler compiler = new GroovyCompiler(classWrangler, log);
65
66 if (configuration instanceof GroovyCompileConfiguration) {
67 compiler.compile((GroovyCompileConfiguration) configuration);
68 } else if (configuration instanceof GroovyStubConfiguration) {
69 compiler.generateStubs((GroovyStubConfiguration) configuration);
70 } else if (configuration instanceof GroovyDocConfiguration) {
71 compiler.generateGroovyDoc((GroovyDocConfiguration) configuration);
72 } else {
73 throw new IllegalArgumentException("Unknown configuration type: " + configuration.getClass().getName());
74 }
75 } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException | java.lang.reflect.InvocationTargetException e) {
76 e.printStackTrace();
77 System.exit(1);
78 }
79 }
80 }