Velocity 2.0:NoClassDefFoundError:org / apache / velocity / runtime / log / CommonsLogLogChute

时间:2017-09-08 14:15:29

标签: java spring velocity

在使用Velocity 2.0启动我的Web应用程序时,我收到以下错误:

Caused by: java.lang.NoClassDefFoundError: 
             org/apache/velocity/runtime/log/CommonsLogLogChute
    at org.springframework.ui.velocity.VelocityEngineFactory.createVelocityEngine(VelocityEngineFactory.java:240)
    at org.springframework.ui.velocity.VelocityEngineFactoryBean.afterPropertiesSet(VelocityEngineFactoryBean.java:60)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
    ... 34 more

所有依赖项都已满足。我们正在使用

  • slf4j-api-1.7.25.jar
  • slf4j-simple-1.7.25.jar
  • 公地lang3-3.5.jar
  • 公地-IO-2.5.jar
  • commons-logging-1.2.jar(是的,我们有Commons-Logging)

在applicationContext.xml中,velocityEngine bean定义如下

<bean id="velocityEngine" 
class="org.springframework.ui.velocity.VelocityEngineFactoryBean"/>

对此有何想法?

我的文件velocity-engine-core-2.0.jar仅包含以下.runtime个子包:

defaults, directive, parser, resource, visitor

但没有log

UPDATE Spring Velocity Engine bean声明中的以下overrideLogging = FALSE解决了这个问题。 但为什么?

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> 
    <property name="overrideLogging" value="false" />
</bean>

我只是小心翼翼 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/ui/velocity/VelocityEngineFactory.html 但不确定发生了什么。

3 个答案:

答案 0 :(得分:4)

当overrideLogging为true时,Spring仍然需要类org.apache.velocity.runtime.log.CommonsLogLogChute,而它在Velocity 2.0中已经消失,因为Velocity现在使用slf4j日志框架。

如果您需要overrideLogging为true,则需要等待Spring Velocity类的更新。

答案 1 :(得分:1)

Velocity改变了日志记录:

  

让Velocity使用基本记录器命名空间'org.apache.velocity'   除非在配置中使用runtime.log.name指定,并且具有   具有此基本命名空间的运行时实例日志以及其他模块   使用子命名空间登录

CommonsLogLogChute在主要版本速度1.7之前添加:

  

添加CommonsLogLogChute,允许通过commons-logging进行日志记录。

所以你可能在运行时环境中有一个旧的jar或配置。

答案 2 :(得分:0)

对于这种情况,阿里巴巴实施了一个支持上下文软件包:https://github.com/alibaba/spring-velocity-support

只需添加到Maven:

<!-- Spring Framework -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.framework.version}</version>
</dependency>

<!-- Spring Context Velocity -->
<dependency>
    <groupId>com.alibaba.spring</groupId>
    <artifactId>spring-context-velocity</artifactId>
    <version>1.4.3.18.RELEASE</version>
</dependency>

但是请注意,您的项目现在使用Velocity 2.0。