前言
因为Oracle并没有向公开Maven仓库提供任何Oracle JDBC Driver的Jar包,因而咱们无奈像MySQL、SQLite等那么轻松间接通过Maven加载依赖。
而手动下载Oracle JDBC Driver Jar包,而后装置到本地仓库(.m2目录),再通过Maven加载依赖则是罕用伎俩。但此外咱们还能通过<scope>system</scope>
的形式引入,但其中的坑上面将细细道来。
手动装置到本地仓库
- 将ojdbc7-12.1.0.2.jar搁置到我的项目根目录的lib目录下,随我的项目进行版本治理;
- 在POM.xml文件中退出依赖定义;
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <version>12.1.0.2</version></dependency>
- 装置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 compile
和mvn 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
解决办法:
- 对于外置Web容器的SpringBoot利用,则将Oracle JDBC Driver Jar包搁置在容器的lib目录下;
- 对于内置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/fsjoh... —— ^_^肥仔John