这段时间在做实验室的一个web项目,因为以前用的更多是MySQL数据库,这个项目里面用的是Oracle,所以踩了一些坑,感觉Oracle真是个不省油的灯。MySQL虽说如日中天,在互联网企业和和研究分布式数据库的领域都是宠儿,但是还是有不少传统企业或者政府的项目还是青睐Oracle,也许他们不在乎收费,就是潜意识觉得花钱买安心吧。
坑一:Oracle没给Maven授权
刚开始我像往常一样,在pom.xml文件里面配置Oracle的JDBC依赖,但是在IDE中编译项目的时候怎么都下载不了驱动类的jar包,后面Google才找到原因。
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库。
这篇文章采用手动安装本地jar包,将下载好的驱动包放到了本地maven仓库中,也是一种方法吧。
我是采用如下的方式:
- 将已有的Oracle JDBC的jar包加入到工程里面(项目采用的是springboot框架,所以是如下的工程结构):
- 在maven配置文件中加入以下配置:12345678<dependency><groupId>com.oracle</groupId><artifactId>ojdbc14</artifactId><version>10.2.0.4.0</version><!-- 下面两行一定要加上 --><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/ojdbc14-10.2.0.4.0.jar</systemPath></dependency>
这样就OK啦,在IDE中编译就会通过啦。
坑二:项目jar找不到Oracle的驱动类
我写完所有的代码,运行mvn clean package
,得到我的项目jar包(因为该项目是springboot框架,所以不同以往的springmvc项目打的war包),然后继续java -jar xxx.jar
准备运行工程时候,这个时候出现了经典的class not found
的错误,错误提示显示找不到oracle.jdbc.driver.OracleDriver
,可是明明在IDEA(比eclipse更好用的IDE)中编译运行都没问题啊,怎么打jar包运行就不行了。
经过Google各种帮助,发现原来还是maven的问题,在pom.xml中修改一个配置选项的就好了:
如果不加上includeSystemScope
的配置,maven在编译的时候就不会包含本地的jar包依赖,导致找不到驱动类。加上之后,再重新编译打包,执行jar,就没有刚才的问题了。
-EOF-