前言

由于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. java泛型之通配符?

    一.在说泛型通配符" ?" 之前先讲几个概念 1.里氏替换原则(Liskov Substitution Principle, LSP): 定义:所有引用基类(父类)的地方必须能透明 ...

  2. 如何查找一个为NULL的MYSQL字段

    前言:在做这个题目 https://www.cnblogs.com/pipihao/p/13786304.html 因为之前 我好像没有接触过什么 为NULL字段的查询,细节不小 WHERE 字段 I ...

  3. Dockerize ASP。净样板项目

    Get the source code from the Github repository. 介绍 在这篇文章中,我将一步步地向你展示如何在Docker上运行ABP模块零核心模板.然后,我们将讨论其 ...

  4. 2. 在TCGA中找到并下载意向数据

    听说过别人用生信分析"空手套白狼"的故事吧想做吗好想学哦~ 或多或少都知道GEO和TCGA这些公共数据库吧!那么你知道怎么在数据库上找到意向数据,并且成功下载呢?这第一步要难倒一大 ...

  5. Visual C# 制作DLL文件

    一.制作.dll1.首先创建一个新类库工程文件  文件->新建->项目->Visual C#->类库.填入工程文件名称,并且选择文件要存放的目录. 2.工程文件 将Class1 ...

  6. 2017-18一《电子商务概论》专科作业--经管B1601/2、经管B1631

    第1次作业: 1.你如何来定义和理解电子商务?电子商务对社会经济带了怎样的影响,企业.消费者的反应如何?你知道哪些电子商务企业,他们都属于什么类型? 2.请详细阐述应该如何关注哪些事项才能在淘宝网成功 ...

  7. MeteoInfoLab脚本示例:获取一维数据并绘图

    气象数据基本为多维数据(通常是4维,空间3维加时间维),只让数据中一维可变,其它维均固定即可提取一维数据.比如此例中固定了时间维.高度维.纬度维,只保留经度维可变:hgt = f['hgt'][0,[ ...

  8. c++程序设计实践——银行系统

    银行系统 本科大二程序设计实践的作业,算是一个比较简单的项目吧,主要使用的编程范式有面向对象编程 其中引入<multimap><map>头文件实现多映射输出存取记录 引入< ...

  9. Vue3 来了,Vue3 开源商城项目重构计划正式启动!

    我打算用 Vue3 写一个商城项目,目前已经开始着手开发,测试完成后正式开源到 GitHub,让大家也可以用现成的 Vue3 大型商城项目源码来练练手. Vue 3.0 来了,我们该做些什么? Vue ...

  10. 使用原生js模拟jQuery选择器,实现new方法,兼容ie5

    // 考虑到兼容ie5,未使用es6语法 /* 使用方法: 在<head>标签中(需使用ready方法): <script src="./jQuery2.js"& ...