在 Maven 專案新增私有的 jar 檔

新增私有 jar 檔的三種方法

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。

  • compile:為預設值,對於編譯、測試、執行有效。
  • test:僅對於測試有效。
  • provided:對於編譯、測試有效。
  • runtime:對於測試、執行有效。
  • system:同 provided,對於編譯、測試有效,但必須搭配 <systemPath> 標籤指定本地 jar 檔路徑。

许晓斌 著, Maven实战

這邊使用 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,可利用介面執行。


參考資料

  1. How to add local jar files to a Maven project?
  2. Maven — 引用本地端的 jar
  3. 如何將私有的 JAR 檔加入到由 Apache Maven 管理的 Java 專案中
  4. How to add local jar files to a Maven project?
  5. Guide to installing 3rd party JARs