项目搭建之路(上)

来源:互联网 发布:qq无限加好友软件 编辑:程序博客网 时间:2024/05/22 17:26

              项目搭建之路

 

在一家小公司实习将近两个月后,有所得,但是还没有在实际中应用,所以在这学期中进行实战,着实有点吃力,不过还好,在互联网行业最大的致命缺点就是消息闭塞,不去那个公司实习也不知道有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对象。

解决方式:

<!-- 代码直接调用log4j会被桥接到slf4j-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
    <scope>runtime</scope>
</dependency>

<!-- 代码直接调用common-logging会被桥接到slf4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
    <scope>runtime</scope>
</dependency>

<!-- 代码直接调用java.util.logging会被桥接到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.

 

这个同样是在初始化spring dao bean的时候出现的,而实际上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中的初始化

下面是连接:

https://github.com/mybatis/mybatis-3/commit/3322ea9481f23d0c5d25497307f9cb41f87358e5#

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

 

 

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

 

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

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

 http://blog.snsgou.com/post-854.html

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

 

然后公司中的那个项目是使用Apachetomcat内置的数据源,于是该段代码:

<!-- 数据源配置 使用tomcat应用内的数据源配置--><beanid="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" >    <propertyname="driverClassName" value="${jdbc.driver}"/>    <propertyname="url" value="${jdbc.url}"/>    <propertyname="username" value="${jdbc.username}"/>    <propertyname="password" value="${jdbc.password}"/>    <propertyname="maxActive" value="${jdbc.pool.maxActive}"/>    <propertyname="maxIdle" value="10"/>    <propertyname="defaultAutoCommit" value="true"/>    <propertyname="testOnBorrow" value="true"/>    <propertyname="testWhileIdle" value="true"/>    <propertyname="validationQuery" value="select 1"/>    <propertyname="removeAbandonedTimeout" value="600"/>    <propertyname="removeAbandoned" value="true"/>    <propertyname="timeBetweenEvictionRunsMillis" value="30000"/>    <propertyname="minEvictableIdleTimeMillis" value="30000"/></bean>

就不好使了,真相是在注释中,maven中没有依赖tomcat的jar包

<dependency>    <groupId>org.apache.tomcat</groupId>    <artifactId>tomcat-jdbc</artifactId>    <version>7.0.59</version></dependency>

也可以改成spring的数据源或者,阿里的数据源,但是我没有这样做,bug太多了。

 

 

但是在使用maven创建web工程时就有坑了,

这里面自动生成的web.xml里不是标准的web.xml,也就是里面的文件头不是你见过的,所以先删除该web.xml,然后找其他的web项目中的这个配置文件粘贴进去就行了,否则里面会有很多标签都要你配置的,后来我发现这个里面的很多必须配置的标签都是在Apachetomcat 安装目录中conf中的web.xml 的标签,但是不知道为什么会出现在这个maven创建的web骨架工程中。

 

后来就是安装idea的mybatis插件让mybatis的sql.xml与dao层的方法对应起来,可是第一次并没有对应,是因为

Mapper中的namespace的路径写错了,导致不能识别。

在idea中的settings 中的plugins中搜索一下就能自己安装了。

这里有关该插件的说明“:
http://www.oschina.net/p/intellij-mybatis-plugin

 

在使用git 命令行将自己项目的模块推送到git上的时候也出现了问题,但是基本解决了:

http://blog.csdn.net/god_wot/article/details/10522405


当然还有其他的一些工具:

以前不能使用google,而且360的好搜功能烂的简直不能满足小学生的要求了,百度对于一些开发者而言也是捉襟见肘。

这里有个Google的代理网址(推测的):

www.googleout.com

将这个网址复制到浏览器地址栏中就可以使用Google搜索了。

这其中一路走来也是艰辛不断,幸而没有放弃始终不断寻找解决方案,终于皇天不负有心人,

将在寒假中没有做的事情一并补了回来

,相较于以前,是学习成果和水平的体现,提高开发的效率,学习的动力。

 

 

 

 

 

 

 

 

  

0 0
原创粉丝点击