日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java jar 命令行运行程序如何引用第三方依赖包

發布時間:2023/12/31 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java jar 命令行运行程序如何引用第三方依赖包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 引言

mybatis generator 是一個命令行運行工具,可以生成 mybatis 代碼。但它需要依賴數據庫驅動 jar,否則會拋出 ClassNotFoundException 異常。

Exception in thread "main" java.lang.RuntimeException: Exception getting JDBC Driverat org.mybatis.generator.internal.JDBCConnectionFactory.getDriver(JDBCConnectionFactory.java:100)at org.mybatis.generator.internal.JDBCConnectionFactory.getConnection(JDBCConnectionFactory.java:83)at org.mybatis.generator.config.Context.getConnection(Context.java:542)at org.mybatis.generator.config.Context.introspectTables(Context.java:446)at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:257)at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:189)at org.mybatis.generator.api.ShellRunner.main(ShellRunner.java:117) Caused by: java.lang.ClassNotFoundException: org.postgresql.Driverat java.net.URLClassLoader.findClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Unknown Source)at org.mybatis.generator.internal.ObjectFactory.internalClassForName(ObjectFactory.java:148)at org.mybatis.generator.internal.ObjectFactory.externalClassForName(ObjectFactory.java:119)at org.mybatis.generator.internal.JDBCConnectionFactory.getDriver(JDBCConnectionFactory.java:97)... 6 more '-overwrite' 不是內部或外部命令,也不是可運行的程序 或批處理文件。

這也就引出了本文的問題:利用 Java jar 命令行運行程序如何引用第三方依賴包?

2 Java 類加載器

JDK9 之前把類加載器分為三類,它們分別是啟動類加載器、擴展類加載器和應用程序類加載器。

(1)啟動類加載器 ( Bootstrap Class Loader )

啟動類加載器負責加載存放在 <JAVA_HOME>\lib 目錄,或者被 -Xbootclasspath 參數所指定的路徑中存放的、且是 Java 虛擬機能夠識別的類庫加載到虛擬機的內存中。

(2)擴展類加載器 (Extension Class Loader)

擴展類加載器是在類 sun.misc.Launchers&ExtClassLoader 中以 Java 代碼的形式實現的。它負責加載 <JAVA_HOME>\lib\ext 目錄中,或者被 java. ext .dirs 系統變量所指定的路徑中所有的類庫。

(3)應用程序類加載器 (Application Class Loader )

應用程序類加載器由 sun.misc.Launcher&AppClassLoader實現。它負責加載用戶類路徑 (Classpath) 上所有的類庫。

3 雙親委派模型

類加載器之間的層次關系被稱為類加載器的 “ 雙親委派模型 (Parents Delegation Model)”。 雙親委派模型要求除了頂層的啟動類加載器外,其余的類加載器都應有自己的父類加載器。

如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每一個層次的類加載器都是如此,因此所有的加載請求最終都應該傳送到最頂層的啟動類加載器中,只有當父加載器反饋自己無法完成這個加載請求 ( 它的搜索范圍中沒有找到所需的類 ) 時,子加載器才會嘗試自己去完成加載。

4 引用第三方依賴包

(1)使用啟動類加載器

-Xbootclasspath/a:xxx.jar

示例:

java -Xbootclasspath/a:postgresql-42.2.18.jar; -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml -overwrite

(2) 使用擴展類加載器

-Djava.ext.dirs=擴展類所在路徑

示例:

cd C:\workspace\ideaProjects\deniro-app\deniro-fly\generator\ java -Djava.ext.dirs=C:\programs\jdk1.8.0_181\jre\lib\ext -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml -overwrite

通過擴展類加載器來指定第三方依賴包的所在路徑,可以實現多個命令行程序復用這些第三方依賴包,因此建議采用。

參考資料

周志明. 深入理解Java虛擬機[M]. 機械工業出版社, 2019.

https://www.cnblogs.com/wqbin/p/11122709.html

https://blog.csdn.net/cyony/article/details/74375251/

總結

以上是生活随笔為你收集整理的Java jar 命令行运行程序如何引用第三方依赖包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。