【问题标题】:Apache Velocity - Failed to eval script due to slf4j dependenciesApache Velocity - 由于 slf4j 依赖关系,无法评估脚本
【发布时间】:2017-08-20 11:00:08
【问题描述】:

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

我使用 jars:velocity-engine-scripting-2.0.jarvelocity-engine-scripting-2.0.jarcommons-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,我将它们添加到类路径但仍然是相同的错误

【问题讨论】:

  • 这个错误清楚地表明依赖不匹配。 IMO,如果您使用的是 maven 项目,您可以从速度中排除 slf4 版本。
  • 我不在 maven 项目中,velocity 正在专门调用 slf4j,因此无法将其删除 org.slf4j.Logger.trace
  • 我遇到了这个问题,我可以通过 exclude 来解决。我真的不知道。如果你不使用 Maven。但绝对你必须以某种方式删除这种依赖,否则将无法工作 IMO

标签: java slf4j velocity jsr233 apache-velocity


【解决方案1】:

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

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

【讨论】:

  • 我添加了slf4j-simple-1.7.25.jar,但还是同样的问题
  • 您是否从源代码中自己编译了 Velocity?我运行您的代码没有任何问题(VELOCITY_PROPERTIES_KEY 除外)。可能是你改完库后忘记重新编译了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2022-06-17
  • 2010-12-14
相关资源
最近更新 更多