在使用Maven新建QuitStart類型項目時,引入了MyBatis3.2.0版本的JAR包之后,出現如下錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Priority
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:176)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:87)
at org.apache.ibatis.io.Resources.classForName(Resources.java:254)
at org.apache.ibatis.type.TypeAliasRegistry.registerAlias(TypeAliasRegistry.java:153)
at org.apache.ibatis.session.Configuration.<init>(Configuration.java:173)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.<init>(XMLConfigBuilder.java:76)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.<init>(XMLConfigBuilder.java:60)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:48)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:35)
at com.jsoft.testmybatis.test1.App.<clinit>(App.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more
這個錯誤的意思是沒有引入log4j的JAR包,解決方法是加入log4j的JAR包依賴,POM配置如下:
<!-- log4j --> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
加入之后,再配置log4j的配置文件,這里命名為:log4j.properties,放在resources文件夾下,配置如下:
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
#ex:http://www.cnblogs.com/zhaozihan/p/6371133.html
只要配置好之后再次運行就不會報如上的錯誤。
但是,思考一下,為什么一定要引入log4j,而且log4j的版本停留在了1.x的版本,如果項目上使用的是2.x版本的,那么這就是一個問題,難道要引入兩個去解決這個問題?
嘗試以下解決方法:
1、嘗試升級MyBatis的版本為3.4.4,不引入log4j。測試之后一切正常,所以此方法是行得通的。
2、升級了3.4.4版本之后,可以通過setting節點指定使用哪個日志組件,這樣也能完美解決框架上使用不同版本的日志組件導致的問題。配置參考:http://www.mybatis.org/mybatis-3/zh/configuration.html#settings