Oracle JDBC驱动的JAR包依赖问题

这段时间在做实验室的一个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仓库中,也是一种方法吧。

我是采用如下的方式:

  1. 将已有的Oracle JDBC的jar包加入到工程里面(项目采用的是springboot框架,所以是如下的工程结构):
  2. 在maven配置文件中加入以下配置:
    1
    2
    3
    4
    5
    6
    7
    8
    <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中修改一个配置选项的就好了:

1
2
3
4
5
6
7
8
9
10
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--必须加上下面的配置,在jar包运行的时候找不到oracle的驱动类-->
<configuration>
<includeSystemScope>
true
</includeSystemScope>
</configuration>
</plugin>

如果不加上includeSystemScope的配置,maven在编译的时候就不会包含本地的jar包依赖,导致找不到驱动类。加上之后,再重新编译打包,执行jar,就没有刚才的问题了。

-EOF-