项目搭建之路(上)

              项目搭建之路

 

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

怎样建立不同的project。

这里有几个链接关于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创建webproject时就有坑了,

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

 

后来就是安装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搜索了。

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

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

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

 

 

 

 

 

 

 

 

  

原文地址:https://www.cnblogs.com/yutingliuyl/p/6692586.html