Apache Velocity - 由于slf4j依赖性而无法评估脚本

时间:2017-08-20 11:00:08

标签: java slf4j velocity jsr233 apache-velocity

继续previous问题我无法在速度2.0中执行脚本,

我使用jar: velocity-engine-scripting-2.0.jar velocity-engine-scripting-2.0.jar commons-collections-3.2。 2.jar

我正在尝试关注developer guide示例:

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:

运行时的Velocity dependencies是:slf4j-api 1.7.25和commons-lang 3.5我添加到classpath但仍然是同样的错误

1 个答案:

答案 0 :(得分:1)

您在常见问题解答中找到的文档摘录显然已过时。

dependencies页明确指出,虽然在编译和运行时需要slf4j-api,但您还需要选择一个slf4j绑定,例如slf4j-simple,它默认会记录到stderr。