• 项目搭建之路(上)


                  项目搭建之路

     

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

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

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

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

     

     

     

     

     

     

     

     

      

  • 相关阅读:
    【转】系统缓存全解析二:动态缓存(4)-第三方分布式缓存解决方案 Velocity
    DevExpress.XtraTreeList.TreeList 的一些解决办法
    【转】系统缓存全解析二:动态缓存(4)-Discuz!NT中集成Memcached分布式缓存
    c#遍历Dictionary
    【转】memcached 命令概述
    WSAWaitforMultEvent使用
    创建线程是否调用CloseHandle
    小序
    select模式学习(二)之:客户端
    CoInitlize使用
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6692586.html
Copyright © 2020-2023  润新知