0

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

我使用罐​​子:velocity-engine-scripting-2.0.jarvelocity-engine-scripting-2.0.jarcommons-collections-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:

我在关于 Velocity的slf4j 常见问题解答中发现了有趣的评论:

Velocity 项目采用的日志记录策略是“自定义日志记录抽象”反模式的一个很好的例子。通过采用独立的日志抽象策略,Velocity 开发人员让自己的生活变得更加艰难,但更重要的是,他们让用户的生活变得更加艰难。

编辑2:

运行时中的速度依赖项是:slf4j-api 1.7.25 和 commons-lang 3.5 我添加到类路径但仍然相同的错误

4

1 回答 1

1

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

依赖项页面明确指出,虽然在编译和运行时需要 slf4j-api,但您还需要选择 slf4j 绑定之一,例如 slf4j-simple,默认情况下将记录到 stderr。

于 2017-08-21T23:46:56.963 回答