继续上一个问题我无法在 velocity 2.0 中执行脚本,
我使用jars:velocity-engine-scripting-2.0.jar,velocity-engine-scripting-2.0.jar,commons-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:
我在 slf4j 常见问题解答中发现了关于速度的有趣评论:
Velocity项目采用的测井策略就是一个很好的例子 的"自定义日志记录抽象"反模式。通过采用 独立的测井抽象策略,速度开发人员有 让自己的生活更艰难,但更重要的是,他们让生活变得艰难 对他们的用户来说更难。
编辑2:
运行时中的速度依赖关系是:slf4j-api 1.7.25 和 commons-lang 3.5,我将其添加到类路径中,但仍然相同的错误
您在常见问题解答中找到的文档摘录显然已经过时。
依赖页面明确指出,虽然在编译和运行时需要 slf4j-api,但您还需要选择一个 slf4j 绑定,例如 slf4j-simple,默认情况下它将记录到 stderr。