u010504064的专栏

项目搭建之路

在一家小公司实习将近两个月后,有所得,但是还没有在实际中应用,所以在这学期中进行实战,着实有点吃力,不过还好,在互联网行业最大的致命缺点就是消息闭塞,不去那个公司实习也不知道有IntllijIDEA这样高效率的开发工具,不知道有mybatis这样的基于sql mapping 的持久层框架,并且可以通过xml锻炼程序员的sql编写能力,更不知道git在团队开发以及开源中的强大作用,当然还有maven,这个jar包管理工具,着实在eclipse下让jar包解脱了,从eclipse,myeclipse中的泥潭走出来,解放程序员的生产力。

当然这个过程是个痛苦而快乐着的,我基于公司项目的配置进行自己项目的配置,但是公司项目是经理自己封装的,所以有很多jar包和插件都是没有用过的,所以在配置过程中出现很多坑,这里就简要记述一下经过,的确,程序员解决bug需要一种韧劲儿,才能将bug揪出来。

我的项目是用idea开发的,框架有spring,spring mvc ,shiro(还没有配置),maven, mybatis,今天又把自己的项目放到了github上督促自己努力提交代码。

第一次在idea中创建项目中web.xml 中的spring监听器不能找到,而且我调了将近一天,发现maven有问题,而且maven在idea中表现的有点异常,后来想到当初搭建私服的时候可能改了某些设置,于是就重配了一次maven,将私服软件卸载,将idea升级到14,重新配置才不会出现那个错误,这个升级是另一个大坑,后面讲。

第二大部分在pom.xml中的一些错误:

INF/classes/applicationContext.xml]:Invocation of init method failed; nested exception isjava.lang.NoClassDefFoundError: org/slf4j/LoggerFactory :

网上有两种说法:

1. 是少包,2包冲突。

2. 我的情况是少包,而且没有进行slf4j的配置的,导致在mybatis分页插件中的类不能找到logger对象。

解决方式:

slf4j–><dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>${slf4j.version}</version> <scope>runtime</scope></dependency>slf4j –><dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> <scope>runtime</scope></dependency>slf4j –><dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>${slf4j.version}</version> <scope>runtime</scope></dependency><!– log4jdbc–><dependency> <groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId>log4jdbc-log4j2-jdbc4</artifactId> <version>1.15</version> <scope>runtime</scope></dependency>

这几个包有slf4j的版本要一致,否则不能准确找到

LoggerFactory这个类。这个类在spring初始化dao层对象的时候会调用到也就是说spring框架会依赖这些包。

而你要注意虽然你在idea中或者eclipse中找到这几个包都有并且被添加进项目了,但是也要注意版本是否一致,这个错网上有基本配置。

Caused by: java.lang.IllegalStateException: Cannot enable lazy loadingbecause CGLIB is not available. Add CGLIB to your classpath.

这个同样是在初始化springdaobean的时候出现的,而实际上dao层依赖mybatis的分页插件,也就是说mybatis里的一些初始化对象会依赖cglib包。

但是cglib我已经加入pom.xml中了,为什么启动项目还是报错呢,上网查的时候,外国开发者说这是一个mybatis的一个bug,在2.0以上,出现的,其中有个类会通过反射初始化cglib对象。有位外国开发者在mybatis中将mybatis中的配置文件中设置如下:

<settings> <!– disable lazy loading for testing as we do not want CGLIB on our classpath –> <setting name="lazyLoadingEnabled" value="false"/> <setting name="useGeneratedKeys" value="false"/></settings>

但是在3.1,3.2中不好使。这就说明是mybatis的bug了。在github上的维护者将该处bug去掉了,就是解除cglib在mybatis中的初始化

下面是连接:

不过我的是3.2.5的,我也查过源码了,里面么有初始化cglib的那段代码可能是依赖错了。现在maven中仓库的mybatis依赖已经到了3.3.0了。

这些错都是百度搜索中没有发现的。在github上和stackoverflow上的开发者中提到的,着实他们的开发水平很高啊。

第三个坑就是idea升级14了很多配置感觉跟13有很多不同,但是我13摸得不是很顺于是又费了将近两天时间搞熟14的一些配置,比如maven,git ,github ,还有tomcat等。如何建立不同的工程。

这里有几个链接关于idea14的有兴趣的可以看看:

打开这个人的‘我的收藏’标签,有很多关于idea和eclipse的文章,有图有真相。非常便于使用idea。

原以为“得不到”和“已失去”是最珍贵的,可原来把握眼前才是最重要的。

u010504064的专栏

相关文章:

你感兴趣的文章:

标签云: