Apache Velocity - не удалось оценить скрипт из-за зависимостей slf4j

Продолжить предыдущий вопрос Я не могу выполнить сценарии на скорости 2.0,

Я использую jars: speed -engine-scripting-2.0.jar, speed -engine-scripting-2.0.jar, commons-collection-3.2.2.jar

Я пытаюсь следовать примеру руководства разработчика:

ScriptEngineManager manager = new ScriptEngineManager();
manager.registerEngineName("velocity", new VelocityScriptEngineFactory());
ScriptEngine engine = manager.getEngineByName("velocity");


System.setProperty(VelocityScriptEngine.VELOCITY_PROPERTIES, "path/to/velocity.properties");
String script = "Hello $world";
Writer writer = new StringWriter();
engine.getContext().setWriter(writer);
Object result = engine.eval(script);
System.out.println(writer);

я собираюсь slf4j ошибка при инициализации, я использую slf4j-jdk14.jar. Я не нашел решения этой конкретной ошибки даже после добавления slf4j-api-1.8.0-alpha2.jar

class org.apache.velocity.script.VelocityScriptEngine
java.lang.NoSuchMethodError: org.slf4j.Logger.trace(Ljava/lang/String;)V
    at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:233)
    at org.apache.velocity.script.VelocityScriptEngine.initVelocityEngine(VelocityScriptEngine.java:212)
    at org.apache.velocity.script.VelocityScriptEngine.compile(VelocityScriptEngine.java:299)
    at org.apache.velocity.script.VelocityScriptEngine.compile(VelocityScriptEngine.java:288)
  • Обратите внимание, что я не использую запись в своем классе, поэтому мне не нужно переходить на slf4j,

РЕДАКТИРОВАТЬ 1:

Я нашел интересный комментарий в slf4j FAQ о Velocity:

Стратегия ведения журнала, принятая проектом Velocity, является хорошим примером анти-паттерна "пользовательская абстракция ведения журнала". Приняв независимую стратегию абстрагирования журналов, разработчики Velocity сделали жизнь труднее для себя, но, что более важно, они сделали жизнь труднее для своих пользователей.

РЕДАКТИРОВАТЬ 2:

Зависимости скорости во время выполнения: slf4j-api 1.7.25 и commons-lang 3.5, которые я добавил в classpath, но все еще та же ошибка

1 ответ

Решение

Выдержка из документации, которую вы нашли в FAQ, явно устарела.

На странице зависимостей четко указано, что хотя slf4j-api необходим во время компиляции и во время выполнения, вам также нужно выбрать одну из привязок slf4j, например, slf4j-simple, которая будет по умолчанию регистрироваться в stderr.

Другие вопросы по тегам