From ec1115df688ca051fda2ca1a8e3e90d1d790978a Mon Sep 17 00:00:00 2001 From: mattirn Date: Sun, 6 Dec 2020 18:16:29 +0100 Subject: [PATCH] Failed to build JLine Graal demo: NoClassDefFoundError, fixes #615 --- build.config | 2 +- demo/pom.xml | 36 +---- graal/pom.xml | 125 ++++++++++++++++++ .../java/org/jline/demo/graal}/Graal.java | 33 ++--- .../native-image/resource-config.json | 0 .../src/main/resources/reflection-config.json | 0 pom.xml | 7 +- 7 files changed, 144 insertions(+), 59 deletions(-) create mode 100644 graal/pom.xml rename {demo/src/main/java/org/jline/demo => graal/src/main/java/org/jline/demo/graal}/Graal.java (78%) rename {demo/src/main/resources/META-INF => graal/src/main/resources}/native-image/resource-config.json (100%) rename {demo => graal}/src/main/resources/reflection-config.json (100%) diff --git a/build.config b/build.config index a9dd4235b..d0eee320d 100644 --- a/build.config +++ b/build.config @@ -15,5 +15,5 @@ function command_repl() { } function command_graal() { - exec demo/target/graal $* + exec graal/target/graal $* } diff --git a/demo/pom.xml b/demo/pom.xml index b5d18f199..4a92e87dc 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -25,7 +25,7 @@ org.jline.demo - + org.jline @@ -105,11 +105,6 @@ org.slf4j slf4j-jdk14 - - org.graalvm.sdk - graal-sdk - provided - @@ -187,40 +182,11 @@ data.json - - src/main/resources - - reflection-config.json - - - - org.graalvm.nativeimage - native-image-maven-plugin - - - - native-image - - package - - - - ${native.image.skip} - graal - org.jline.demo.Graal - - --no-fallback - --report-unsupported-elements-at-runtime - --allow-incomplete-classpath - -H:ReflectionConfigurationFiles=reflection-config.json - - - diff --git a/graal/pom.xml b/graal/pom.xml new file mode 100644 index 000000000..83e0a124a --- /dev/null +++ b/graal/pom.xml @@ -0,0 +1,125 @@ + + + + + 4.0.0 + + + org.jline + jline-parent + 3.17.2-SNAPSHOT + + + jline-graal + JLine Graal Demo + + + org.jline.graal + + + + + org.jline + jline + + + + net.java.dev.jna + jna + + + + org.fusesource.jansi + jansi + + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-jdk14 + + + org.graalvm.sdk + graal-sdk + provided + + + + + + + maven-dependency-plugin + + + copy + + copy-dependencies + + + ${project.build.directory}/lib + + + + + + maven-resources-plugin + + + copy-root + validate + + copy-resources + + + ${basedir}/target + + + src/main/resources + + reflection-config.json + + + + + + + + + org.graalvm.nativeimage + native-image-maven-plugin + + + + native-image + + package + + + + ${native.image.skip} + graal + org.jline.demo.graal.Graal + + --no-fallback + --report-unsupported-elements-at-runtime + --allow-incomplete-classpath + -H:ReflectionConfigurationFiles=reflection-config.json + + + + + + + diff --git a/demo/src/main/java/org/jline/demo/Graal.java b/graal/src/main/java/org/jline/demo/graal/Graal.java similarity index 78% rename from demo/src/main/java/org/jline/demo/Graal.java rename to graal/src/main/java/org/jline/demo/graal/Graal.java index 166dc02ef..36d2061cd 100644 --- a/demo/src/main/java/org/jline/demo/Graal.java +++ b/graal/src/main/java/org/jline/demo/graal/Graal.java @@ -6,12 +6,13 @@ * * https://opensource.org/licenses/BSD-3-Clause */ -package org.jline.demo; +package org.jline.demo.graal; import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; +import java.util.function.Supplier; import org.jline.console.impl.Builtins; import org.jline.console.impl.Builtins.Command; @@ -21,7 +22,6 @@ import org.jline.reader.*; import org.jline.reader.LineReader.Option; import org.jline.reader.impl.DefaultParser; -import org.jline.reader.impl.DefaultParser.Bracket; import org.jline.terminal.Terminal; import org.jline.terminal.TerminalBuilder; import org.jline.terminal.Terminal.Signal; @@ -32,36 +32,31 @@ public class Graal { - private static Path workDir() { - return Paths.get(System.getProperty("user.dir")); - } - public static void main(String[] args) { try { + Supplier workDir = () -> Paths.get(System.getProperty("user.dir")); // // Parser & Terminal // DefaultParser parser = new DefaultParser(); - parser.setEofOnUnclosedBracket(Bracket.CURLY, Bracket.ROUND, Bracket.SQUARE); parser.setEofOnUnclosedQuote(true); parser.setEscapeChars(null); - parser.setRegexCommand("[:]{0,1}[a-zA-Z!]{1,}\\S*"); // change default regex to support shell commands parser.setRegexVariable(null); // we do not have console variables! Terminal terminal = TerminalBuilder.builder().build(); Thread executeThread = Thread.currentThread(); terminal.handle(Signal.INT, signal -> executeThread.interrupt()); // - // Command registeries + // Command registries // File file = new File(Graal.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); - String root = file.getCanonicalPath().replace("graal", "").replaceAll("\\\\", "/"); // forward slashes works better also in windows! + String root = file.getCanonicalPath().replace("graal", "") + .replaceAll("\\\\", "/"); // forward slashes works better also in windows! ConfigurationPath configPath = new ConfigurationPath(Paths.get(root), Paths.get(root)); Set commands = new HashSet<>(Arrays.asList(Builtins.Command.values())); commands.remove(Command.TTOP); // ttop command is not supported in GraalVM - Builtins builtins = new Builtins(commands, Graal::workDir, configPath, null); - Repl.MyCommands myCommands = new Repl.MyCommands(Graal::workDir); - SystemRegistryImpl systemRegistry = new SystemRegistryImpl(parser, terminal, Graal::workDir, configPath); - systemRegistry.setCommandRegistries(builtins, myCommands); + Builtins builtins = new Builtins(commands, workDir, configPath, null); + SystemRegistryImpl systemRegistry = new SystemRegistryImpl(parser, terminal, workDir, configPath); + systemRegistry.setCommandRegistries(builtins); // // LineReader // @@ -82,10 +77,9 @@ public static void main(String[] args) { reader.setVariable(LineReader.BLINK_MATCHING_PAREN, 0); // if enabled cursor remains in begin parenthesis (gitbash) } // - // complete command registeries + // complete command registries // builtins.setLineReader(reader); - myCommands.setLineReader(reader); // // widgets and console initialization // @@ -98,9 +92,8 @@ public static void main(String[] args) { System.out.println(terminal.getName() + ": " + terminal.getType()); while (true) { try { - systemRegistry.cleanUp(); // delete temporary variables and reset output streams + systemRegistry.cleanUp(); // reset output streams String line = reader.readLine("graal> "); - line = parser.getCommand(line).startsWith("!") ? line.replaceFirst("!", "! ") : line; Object result = systemRegistry.execute(line); if (result != null) { System.out.println(result); @@ -113,10 +106,10 @@ public static void main(String[] args) { break; } catch (Exception e) { - systemRegistry.trace(true, e); // print exception and save it to console variable + systemRegistry.trace(true, e); // print exception } } - systemRegistry.close(); // persist pipeline completer names etc + systemRegistry.close(); } catch (Throwable t) { t.printStackTrace(); diff --git a/demo/src/main/resources/META-INF/native-image/resource-config.json b/graal/src/main/resources/native-image/resource-config.json similarity index 100% rename from demo/src/main/resources/META-INF/native-image/resource-config.json rename to graal/src/main/resources/native-image/resource-config.json diff --git a/demo/src/main/resources/reflection-config.json b/graal/src/main/resources/reflection-config.json similarity index 100% rename from demo/src/main/resources/reflection-config.json rename to graal/src/main/resources/reflection-config.json diff --git a/pom.xml b/pom.xml index 5c87b738d..792e0d563 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ 3.0.6 2.5.0 19.3.1 - + @@ -255,7 +255,7 @@ groovy-console ${groovy.version} - + org.graalvm.sdk graal-sdk @@ -543,7 +543,7 @@ org.graalvm.nativeimage native-image-maven-plugin ${graal.version} - + @@ -606,6 +606,7 @@ style jline demo + graal