前言

由于Oracle并没有向公开Maven仓库提供任何Oracle JDBC Driver的Jar包,因此我们无法像MySQL、SQLite等那么轻松直接通过Maven加载依赖。

而手动下载Oracle JDBC Driver Jar包,然后安装到本地仓库(.m2目录),再通过Maven加载依赖则是常用手段。但此外我们还能通过<scope>system</scope>的方式引入,但其中的坑下面将细细道来。

手动安装到本地仓库

  1. 将ojdbc7-12.1.0.2.jar放置到项目根目录的lib目录下,随项目进行版本管理;
  2. 在POM.xml文件中加入依赖定义;
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency>
  1. 安装JAR包到本地仓库。
# 在项目根目录下执行
mvn install:install-file -Dfile=./lib/ojdbc7-12.1.0.2.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar

scope为system在SpringBoot中的坑

除上述方式外,我们可以在POM.xml将依赖定义为

<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc7-12.1.0.2.jar</systemPath>
</dependency>

那么即使本地仓库(.m2目录)下没有Oracle JDBC Driver依赖,执行mvn compilemvn spring-boot:run依然成功执行。

请注意,执行mvn package打包出来的SpringBoot UberJar包中没有包含Oracle JDBC Driver依赖,那么直接部署到服务器上则报如下错误:

############

application failed to start

Description:

..................................

Reason: Failed to load driver class oracle.jdbc.driver.OracleDriver in either of HikariConfig class loader or Thread context classloader.

Action:

Update your application's configuration

############

解决方法:

  1. 对于外置Web容器的SpringBoot应用,则将Oracle JDBC Driver Jar包放置在容器的lib目录下;
  2. 对于内置Web容器的SpringBoot应用,则修改spring-boot-maven-plugin插件配置即可,具体请见下文。

说说Maven依赖定义中的scope属性

作用:用于限制依赖在Maven项目各生命周期的作用范围。

  • compile,默认值,依赖将参与编译阶段,并会被打包到最终发布包(如Jar、War、UberJar)内的Lib目录下。具有传递性,即该依赖项对于依赖当前项目的其它项目同样生效;
  • provided,依赖将参与编译阶段但不会被打包到最终的发布包,运行阶段由容器或JDK提供。不具备传递性。(如Servlet API,JSP API,Lombok等);
  • runtime,依赖不参与编译阶段(即不加入到classpath),但会打包到最终发布包,从而参与运行和测试阶段。通常用于根据配置文件动态加载或接口反射加载的依赖(如JDBC驱动);
  • test,依赖参加编译阶段,但不打包到最终发布包,依赖仅参与测试阶段;
  • system,表示该依赖项的路径为基于文件系统的Jar包路径,并且必须通过systemPath指定本地文件路径。依赖参与编译阶段,默认不会被打包到最终发布包。
    • 对于Spring Boot项目,若要将scope为system的Jar包打包到发布包,则需要配置spring-boot-maven-plugin
      <build>
      <plugins>
      <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
      <includeSystemScope>true</includeSystemScope>
      </configuration>
      </plugin>
      </plugins>
      </build>
  • import,Maven2.0.9新增的scope值。仅能在<dependencyManagement>中使用,用于引用其它项目的依赖项。
    • 示例
      <!-- 引入项目io.fsjohnhuang.deps的依赖项 -->
      <dependencyManagement>
      <dependency>
      <groupId>io.fsjohnhuang</groupId>
      <artifactId>deps</artifactId>
      <type>pom</type>
      <scope>import</scope>
      </dependency>
      </dependencyManagement>
    • 关于type pom

      若项目拥有大量依赖项,那么会导致当前项目的POM.xml文件臃肿,即使采用父POM依然无法很好地解决该问题。而通过type为pom的项目则可以将依赖项分打包为独立项目,然后其它业务系统项目则可以通过引入这些项目导入相关依赖项,从而精简POM文件。
    • 关于type属性

      默认的type属性值为jar,即Maven将项目编译打包为Jar包,当设置为pom时则表示该项目为一堆相关依赖项的打包定义而已,当设置为apk或ejb等时则表示Maven在编译打包时采用andriod或ejb相关的插件执行任务。

总结

好记性不如烂笔头,Maven功能强大的背后自然也蕴藏着大量的知识点,记下来以便日后查阅!

转载请注明来自:https://www.cnblogs.com/fsjohnhuang/p/13937146.html —— ^_^肥仔John

Maven魔法堂:安装Oracle JDBC Driver依赖的那些坑的更多相关文章

  1. JAVA学习7:在Maven仓库中添加Oracle JDBC驱动

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 一.首先要得到Oracle ...

  2. 【转】Install Oracle Jdbc driver in your Maven local repository

    Install Oracle Jdbc driver in your Maven local repository If you are using Oracle, you must first in ...

  3. 手动向Maven本地仓库添加ORACLE jdbc驱动

    一,当在maven工程中我们需要连接数据库的时候,只需要配置它的依赖就行,但是Maven不提供Oracle JDBC driver,由于Oracle授权问题它并没有提供,需要自己手动添加. 二,获取连 ...

  4. spring配置hibernate在使用oracle驱动时报错Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver '

    在看到这个错误的时候就感觉有点不对劲了,在错误的结尾和引号之间还有空间,如果敏锐的点应该察觉到可能是空格问题.由于本人的粗心导致这个问题一直困扰了我接近一个上午. 在排查这个问题的时候首先想到的就是关 ...

  5. 在MAVEN仓库中添加ORACLE JDBC驱动

    本文转载自 http://www.cnblogs.com/leiOOlei/archive/2013/10/21/3380568.html 因为已经是第二次遇到,所以COPY过来,怕以后别人的BLOG ...

  6. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader.findCla ...

  7. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...

  8. myeclipe eclipse 常遇问题:Some projects cannot be imported 、java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver、The file connot be validate

    1.Some projects cannot be imported because they already exist in the workspace 2.Some projects were ...

  9. 关于Class.forName("oracle.jdbc.driver.OracleDriver");报ClassNotFoundException 的异常

    关于try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e) ...

随机推荐

  1. 高效学习必备软件:OneNote+ Mindmaster

    做笔记有两个关键点: 一是笔记内容详略得当.二是知识的框架清晰完整. 为什么这样说? 举个例子,如图是我的笔记界面,用的是免费的OneNote, OneNote是微软出的笔记软件, 非常好用,有着书写 ...

  2. JDK1.8新特性之(一)--Lambda表达式

    近期由于新冠疫情的原因,不能出去游玩,只能在家呆着.于是闲来无事,开始阅读JDK1.8的源代码.在开始之前也查询了以下JDK1.8的新特性,有针对性的开始了这段旅程. 只看不操作,也是不能心领神会的. ...

  3. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  4. Java知识系统回顾整理01基础01第一个程序04创建Eclipse项目

    一.为Eclipse设置桌面快捷方式图标 二.双击桌面快捷方式打开Eclipse 三.选择工作区 使用在命令行Hello World中的项目目录e:\project 除了第一次启动eclipse的时候 ...

  5. 晶振(crystal)与谐振荡器(oscillator)

    参考: 1. https://wenku.baidu.com/view/e609af62f5335a8102d2202f.html 2. 晶体振荡器也分为无源晶振和有源晶振两种类型.无源晶振与有源晶振 ...

  6. Oracle Database XE 11gR2 自带的用户,新建用户,修改用户密码

    操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...

  7. 2020年了,IT外企还香吗?

    本来是刚发了<世上有不用加班的程序员吗?>,有朋友问到IT外企不加班福利好什么的,就回复了几句. 老王观点: 现在IT外企已经不值得羡慕了,08.09年那会,ibm,惠普还是香饽饽,当时人 ...

  8. centos7.5安装gcc7.2.0

    参考https://www.cnblogs.com/lazyInsects/p/9778910.html cd /usr/src wget https://mirrors.tuna.tsinghua. ...

  9. vs code个性化设置

    文件=>首选项=>设置,直接在搜索栏搜索有背景色的部分即可 1. 鼠标滚轮缩放 "editor.mouseWheelZoom": true 2. 显示空格和tab符号 ...

  10. spring boot:配置shardingsphere(sharding jdbc)使用druid数据源(druid 1.1.23 / sharding-jdbc 4.1.1 / mybatis / spring boot 2.3.3)

    一,为什么要使用druid数据源? 1,druid的优点 Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 但spring ...