Мы можем создать и запустить groovyscript во время выполнения с помощью кода нижеКак проверить заводной скрипт на наличие ошибок компиляции
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import java.io.File;
import java.io.IOException;
// Create a String with Groovy code.
final StringBuilder groovyScript = new StringBuilder();
groovyScript.append("class Sample {");
groovyScript.append(" String sayIt() { return \"Groovy says: Cool jajaja\" }");
groovyScript.append("}");
GroovyClassLoader gcl = new GroovyClassLoader()
GroovyCodeSource codeSource = new GroovyCodeSource(groovyScript.toString(), "aa", GroovyShell.DEFAULT_CODE_BASE)
//GCL will check for enabled cache over code source and use sourceCache to cache code with name
def scriptClass = gcl.parseClass(codeSource)
def classInstance = scriptClass.newInstance()
assert "Groovy says: Cool jajaja".equals(classInstance.sayIt())
Теперь предположим, что в коде выше, мы ввели ошибку и теперь приведенный выше код, как показано ниже:
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import java.io.File;
import java.io.IOException;
// Create a String with Groovy code.
final StringBuilder groovyScript = new StringBuilder();
groovyScript.append("class Sample {");
groovyScript.append("jajaja");
groovyScript.append(" String sayIt() { return \"Groovy says: Cool jajaja\" }");
groovyScript.append("}");
GroovyClassLoader gcl = new GroovyClassLoader()
GroovyCodeSource codeSource = new GroovyCodeSource(groovyScript.toString(), "aa", GroovyShell.DEFAULT_CODE_BASE)
//GCL will check for enabled cache over code source and use sourceCache to cache code with name
def scriptClass = gcl.parseClass(codeSource)
def classInstance = scriptClass.newInstance()
assert "Groovy says: Cool jajaja".equals(classInstance.sayIt())
Обратите внимание: мы добавили «jajaja» в сценарий после объявления класса.
Что должно быть сделано здесь, чтобы знать, что у нашего скрипта есть ошибки компиляции и не удастся с отсутствием исключения MissingPropertyException или другим исключением.
Когда попробовать то же самое с groovyConsole, он ломает сценарий с следующее сообщение об ошибке
1 compilation error:
unexpected token: jajaja at line: 1, column: 15
Можно ли проверить сценарий на наличие ошибок компиляции, прежде чем запустить его? Добавление блока try catch не работало для меня для этого кода.
Обернуть 'gcl.parseClass' в' try ... catch'? Не думаю, что я понимаю вопрос ... –
Я согласен с Тимом, плохо понимаю, в чем проблема, и решение в порядке. catch MultipleCompilationErrorsException и, вероятно, CompilationFailedException –
Вы не можете проверить, что что-то не получится, что не существует. Класс Sample не существует, пока вы не запустите скрипт. Вы спрашиваете, есть ли способ сказать «groovyScript» сказать вам, не сработает ли он первым? Я не уверен, что они купят вам, так как вам просто нужно запустить его в любом случае, чтобы зайти так далеко. – Gregg