欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解pom如何引入非Maven工程的jar包

 更新時間:2023年12月20日 10:54:30   作者:暗黑腐竹  
系統(tǒng)遷移從某個公有云遷移到私有云,因為現在國內大力推行國產化,所以我們這次遷移有兩個國產化的東西,第一個是操作系統(tǒng)采用了歐拉操作系統(tǒng),第二個就是數據庫采用了goldendb,本文給大家詳細介紹了pom如何引入非Maven工程的jar包,需要的朋友可以參考下

背景

系統(tǒng)遷移從某個公有云遷移到私有云,因為現在國內大力推行國產化,所以我們這次遷移有兩個國產化的東西(這里不包括硬件)。第一個是操作系統(tǒng)采用了歐拉操作系統(tǒng)(華為爸爸出產據說已捐),第二個就是數據庫采用了goldendb。

這次記錄這個問題主要是因為使用提供的goldendb的驅動連接不上數據庫,啟動的時候報錯。這次我們使用的對方提供的gdb_mysql-connector-java-5.1.46.28.jar這個驅動,而且是一個普通工程打成的jar包。

maven工程打包結構中包含pom文件:

而普通工程打包后,是不存在pom文件的:

問題

這個jar包如何使用,用maven私庫管理?直接引用?當作外部jar包加載?這個時候發(fā)現自己的儲備已經不夠用。

分析

因為本地沒有goldendb只能使用mysql8做測試,驅動使用gdb_mysql-connector-java-5.1.46.28.jar。

方案一:通過web頁面上傳jar包到nexus私庫中,使用pom依賴引入,失敗現象下載的jar是空包;

方案二:使用java -jar -Dload.path,但百度告訴我應該使用java -cp path/to/external.jar -jar yourJarFile.jar;

方案三:使用maven命令將驅動jar包推入nexus私服中;

方案四:在項目中的pom文件中使用如下配置,引入jar包;

方案一

使用管理員賬號登錄自己或者公司搭建的nexus私服,找到左邊upload菜單,選中目標倉庫進行上傳界面如下(圖片為nexus3的界面僅供參考):

*注意: *最后的packaging填上jar

上傳是成功的,因為在倉庫里是能找到對應的包和內容的(網絡圖片僅供參考):

但是,下載的時候卻是不成功的,因為每次下載下來的依賴包只有6kb:

然而服務器上是975kb:

那就說明普通java工程打jar不能通過這種方式直接上傳,可能使用maven命令將驅動jar包推入nexus私服中,只是猜測需要驗證,方案一行不通。

方案四

新建一個springboot maven項目,在application中增加數據源的配置:

spring:
    datasource:
       username: rrbbd
       password: gfdgdf
       driver-class-name: com.goldendb.jdbc.Driver
       url: jdbc:goldendb:loadbalance://localhost:3306/monster?useCursorFetch=false&useSSL=false&cachePrepStmts=true&prepStmtCacheSqlLimit=20480&prepStmtCacheSize=2000&characterEncoding=utf8&queryTimeoutKillsConnection=true&isConnectionLevel=true&connectTimeout=60000&shadowThreadSwitch=False

使用了大佬提供的maven配置進行測試,在工程resources目錄下創(chuàng)建lib目錄,通過在pom中增加如下配置來引入jar包:

<dependency>
        <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.46</version>
       <scope>system</scope>
       <systemPath>${project.basedir}/src/main/resources/lib/gdb_mysql-connector-java-5.1.46.28.jar</systemPath>
</dependency>

*注意: *這里的groupId、artifactId、version可隨便命名

然后根據自己的表創(chuàng)建一個jdbc查詢語句,用于測試:

Connection con = dataSource.getConnection();
Statement stmt = con.createStatement();
String sql = "select * from t_user;";
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData();
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
log.info("id:{}", id);
log.info("name:{}", name);
}
con.close();

工程的目錄結構:

異常報錯

第一次在idea中啟動報java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.

問題原因

這是mysql 8.0版本才出現的問題,原因是mysql 8.0 默認使用 caching_sha2_password 身份驗證機制 —— 從原來的 mysql_native_password 更改為 caching_sha2_password。所以一般這種報錯由于本地的MySQL使用的是最新版8.0版本,而打包的項目使用的則是比較低的版本,可以解釋說是版本沖突產生的問題。

解決方法

方案1:安裝較低版本的MySQL

方案2:修改身份驗證機制:

alter user 'root'@'localhost' identified by '你的密碼' password expire never;
?
alter user 'root'@'localhost' identified with mysql_native_password by '你的密碼'
?
flush privileges;

解決認證問題,在idea中啟動能夠成功連接數據庫并讀取數據如下圖:

打包使用命令啟動發(fā)現,任然報找不到驅動:

檢查jar包中驅動已經打包進去了:

大佬又花了幾分鐘搞了個測試,增加了一個springboot maven打包插件的參數,如下:

再次打包使用java -jar也成功連接上了mysql數據庫,同時也讀出來了數據。

結論

方案二和方案三還沒有進行測試后續(xù)再補充,總歸還是自己對maven不夠了解。至于手動上傳普通java jar包到nexus無法下載,我猜可能因為下載的機制需要驗證groupId、artifactId、version與jar包中的pom文件中的定義一樣。也就是手動上傳至少需要這個jar包本身就是一個maven工程打的包含有pom文件,但這個猜測也需要驗證。

總結

一開始,使用驅動直接在項目中替換,改apollo配置嘗試啟動。改來改去我總覺得排查問題的干擾因素太多,那為什么不簡單一點呢?我們直接寫一個demo用jdbc查詢一個測試表,將數據展示出來。這樣就簡單多了,我們關注問題本身,排除其他因素的干擾。讀不到驅動,不是包沒有引入,就是配置有問題,這樣我們可以集中精力去做更多的嘗試。如果包也引入了,配置也沒問題,那再排查其他問題。我認為這種控制變量因素最小化,可以幫助我們來更快地定位到問題以及解決問題。記錄一下問題排查的過程,方便以后自己和別人查閱。如果文章有錯誤的描述或者需要修正可以留言聯系我。

遺留問題

問題雖然解決了,但還遺留兩個問題。

問題1:普通工程的jar是否可以使用nexus進行管理?是否使用maven命令叫jar推到私庫里方式就可以了呢?這個問題還需要驗證。

問題2:是否可以使用啟動命令java上-cp來加載外部jar依賴?這種方式是否能是程序讀到依賴的驅動也還需要驗證。

以上就是詳解pom如何引入非Maven工程的jar包的詳細內容,更多關于pom引入非Maven jar包的資料請關注腳本之家其它相關文章!

相關文章

  • Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    這篇文章主要介紹了Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring Reactor基本介紹和案例解析

    Spring Reactor基本介紹和案例解析

    Spring Reactor 是一個響應式編程框架,非常適合類似 MXN 這樣的流程編排系統(tǒng),也是 Java 中異步編程的一種補充,這篇文章主要介紹了Spring Reactor基本介紹和案例解析,需要的朋友可以參考下
    2024-07-07
  • 聊一聊new對象與Spring對bean的初始化的差別

    聊一聊new對象與Spring對bean的初始化的差別

    這篇文章主要介紹了聊一聊new對象與Spring對bean的初始化的差別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java 序列化和反序列化實例詳解

    Java 序列化和反序列化實例詳解

    這篇文章主要介紹了Java 序列化和反序列化實例詳解的相關資料,需要的朋友可以參考下
    2017-03-03
  • java方法重寫時需要注意的問題

    java方法重寫時需要注意的問題

    大家好,本篇文章主要講的是java方法重寫時需要注意的問題,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 詳細解析Java中抽象類和接口的區(qū)別

    詳細解析Java中抽象類和接口的區(qū)別

    這篇文章主要介紹了Java中抽象類和接口的區(qū)別詳解,需要的朋友可以參考下
    2014-10-10
  • Java中Queue的poll()和remove()區(qū)別詳解

    Java中Queue的poll()和remove()區(qū)別詳解

    這篇文章主要介紹了Java中Queue的poll()和remove()區(qū)別詳解,Queue接口提供了許多方法,其中poll()和remove()是兩個常用的方法,它們的區(qū)別在于,當隊列為空時,poll()方法返回null,而remove()方法會拋出,需要的朋友可以參考下
    2023-07-07
  • mybatis中的test語句失效處理方式

    mybatis中的test語句失效處理方式

    這篇文章主要介紹了mybatis中的test語句失效處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 簡單談談JVM、JRE和JDK的區(qū)別與聯系

    簡單談談JVM、JRE和JDK的區(qū)別與聯系

    簡單的說JDK是用于開發(fā)的而JRE是用于運行Java程序的。JDK和JRE都包含了JVM,從而使得我們可以運行Java程序。JVM是Java編程語言的核心并且具有平臺獨立性。
    2016-05-05
  • Java垃圾回收jconsole分析

    Java垃圾回收jconsole分析

    這篇文章主要為大家介紹了Java垃圾回收jconsole分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論