Java 的 Maven 專案中想引用的 jar 檔因授權問題或公司內部自行開發而未存在於 Maven Central Repository,因此必須手動新增。
本篇以新增 Oracle Database JDBC driver 為例來說明三種方法的實作。
方法一:在 pom.xml 檔添加 <dependency> 引用本地 jar 檔路徑
於專案根目錄建立 lib 目錄,將 ojdbc8.jar 檔放入,並在 pom.xml 添加 <dependency>
,如下:
<dependencies>
...
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/ojdbc8.jar</systemPath>
</dependency>
...
</dependencies>
必須加入 <scope>
及 <systemPath>
標籤,其中 ${basedir}
變數為專案根目錄。
<scope>
標籤為依賴的範圍,控制三個 classpath,有編譯 (compile)、測試 (test)、執行 (runtime),設定值有 compile、test、provided、runtime、system。― 许晓斌 著, Maven实战
- compile:為預設值,對於編譯、測試、執行有效。
- test:僅對於測試有效。
- provided:對於編譯、測試有效。
- runtime:對於測試、執行有效。
- system:同 provided,對於編譯、測試有效,但必須搭配
<systemPath>
標籤指定本地 jar 檔路徑。
這邊使用 system 為編譯及執行時有效,在部署至容器後因容器已提供所以無須使用,需再搭配 <systemPath>
標籤指定本地 jar 檔路徑。
方法二:在 pom.xml 檔添加 <repositories> 引用專案 Repository 路徑
於專案根目錄建立 lib 目錄作為 Repository,並在 pom.xml 添加 <repositories>
,如下:
<repositories>
<repository>
<id>lib</id>
<name>lib</name>
<url>file:///${basedir}/lib</url>
</repository>
</repositories>
在 pom.xml 加入 ojdbc8.jar 檔座標,並將依賴的 jar 檔依照座標建立目錄路徑。
<dependencies>
...
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>1.0</version>
</dependency>
...
</dependencies>
如上座標則於 lib 下建立 com/oracle/jdbc/ojdbc8/1.0 目錄,並命名 jar 檔為 ojdbc8–1.0.jar。
最後在相同路徑新增同檔名的 ojdbc8–1.0.pom,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>1.0</version>
<description>POM was created from install:install-file</description>
</project>
設定如下:
設定後會在 Maven Local Repository 複製相同的 jar 檔。
方法三:以 install:install-file 指令將 jar 檔安裝到 Maven Local Repository
若需在 pom.xml 添加依賴,必須以指令手動安裝此依賴的 Maven 座標,以將 jar 檔安裝在 Maven Local Repository。
指令如下:
mvn install:install-file
-DgroupId=<group-id>
-DartifactId=<artifact-id>
-Dversion=<version>
-Dpackaging=<packaging>
-DgeneratePom=<true/false> (預設為 true)
-Dfile=<path-to-file>
以 Oracle Database JDBC driver 為例:
mvn install:install-file
-DgroupId=com.oracle.jdbc
-DartifactId=ojdbc8
-Dversion=1.0
-Dpackaging=jar
-Dfile=C:\Users\chengjhan\Desktop\ojdbc8.jar
已安裝 ojdbc8.jar 檔於 Maven Local Repository。
若使用 Eclipse,可利用介面執行。
參考資料
- How to add local jar files to a Maven project?
- Maven — 引用本地端的 jar
- 如何將私有的 JAR 檔加入到由 Apache Maven 管理的 Java 專案中
- How to add local jar files to a Maven project?
- Guide to installing 3rd party JARs