由于Oracle并没有向公开Maven仓库提供任何Oracle JDBC Driver的Jar包,因此我们无法像MySQL、SQLite等那么轻松直接通过Maven加载依赖。
而手动下载Oracle JDBC Driver Jar包,然后安装到本地仓库(.m2目录),再通过Maven加载依赖则是常用手段。但此外我们还能通过<scope>system</scope>
的方式引入,但其中的坑下面将细细道来。
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <version>12.1.0.2</version> </dependency>
# 在项目根目录下执行 mvn install:install-file -Dfile=./lib/ojdbc7-12.1.0.2.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar
除上述方式外,我们可以在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
解决方法:
作用:用于限制依赖在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>
好记性不如烂笔头,Maven功能强大的背后自然也蕴藏着大量的知识点,记下来以便日后查阅!
转载请注明来自:https://www.cnblogs.com/fsjoh... —— ^_^肥仔John