windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式
使用mvn命令打包并指定jdk路徑
使用背景:我本機安裝配置的是jdk17,從網(wǎng)上拉取下來的項目使用的是jdk1.8,直接運行或者打包的話會報錯。
IDEA
idea中可以切換jdk,setting -> project structure -> project中 配置好新下載安裝好的jdk1.8的安裝路徑即可。
不打開IDEA,直接使用命令進行打包
新建一個txt文件,編寫以下內(nèi)容
set JAVA_HOME=xxx 僅僅是設置臨時環(huán)境變量,不修改實際的。
set JAVA_HOME=C:\Users\kekePang\.jdks\corretto-1.8.0_322 mvn clean package
保存文件,重命名為 package.bat
最后將該執(zhí)行文件拷貝到要打包的maven項目根目錄下,雙擊運行bat文件即可實現(xiàn)在jdk1.8環(huán)境下的正常打包。
我們Ctrl+R打開命令窗口,輸入java -version,當前java版本還是17.
MVN打包報錯:在類路徑或引導類路徑中找不到程序包 java.lang
現(xiàn)象
同一個Springboot項目在windows下mvn打包正常,在linux下打包就失敗了。
打包命令如下 :
mvn clean package -Dmaven.test.skip=true
然后Linux中的其他項目打包也正常,就是這個項目不正常。
報錯日志
key/.m2/repository/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar,/home/itkey/.m2/repository/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar,.]
致命錯誤: 在類路徑或引導類路徑中找不到程序包 java.lang
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] An unknown compilation problem occurred
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for wsdm 1.0.0:
[INFO]
[INFO] wsdm ............................................... SUCCESS [ 0.201 s]
[INFO] wsdm-common ........................................ FAILURE [ 2.113 s]
[INFO] wsdm-liantong ...................................... SKIPPED
[INFO] wsdm-system ........................................ SKIPPED
[INFO] wsdm-framework ..................................... SKIPPED
[INFO] wsdm-generator ..................................... SKIPPED
[INFO] wsdm-rongcloud ..................................... SKIPPED
[INFO] wsdm-admin ......................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.647 s
[INFO] Finished at: 2022-04-21T14:58:23+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project wsdm-common: Compilation failure
[ERROR] An unknown compilation problem occurred
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <args> -rf :wsdm-common
原因分析
關鍵信息致命錯誤: 在類路徑或引導類路徑中找不到程序包 java.lang人這里就可以看出應該是編譯的時候環(huán)境變量有問題。
我就開始懷疑是不是JDK配置的問題。
檢查了一下JDK1.8配置正常,我還專門把多余的JDK11刪除以防混淆。
結果還是沒有作用。
因為其他項目編譯打包是正常的,只是這個項目不正常。我在考慮會不會MVN的某個配置文件不兼容LINUX導致的?
于是我就對比了一下pom.xml文件的區(qū)別發(fā)現(xiàn)如下一段
<configuration> ? ? <source>${java.version}</source> ? ? ?<target>${java.version}</target> ? ? ?<encoding>${project.build.sourceEncoding}</encoding> ? ? ?<compilerArguments> ? ? ? ? ?<verbose/> ? ? ? ? ?<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath> ? ? ?</compilerArguments> ?</configuration>
在編譯正常的項目中沒有這段配置<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
最終證明真的是這么配置導致的問題的發(fā)生。
解決辦法
配置問題:pom.xml中以下標簽中的標簽中間配置的jdk的分隔符是不是改錯了,
- window下是英文符號;
- linux下是英文符號:
windows
<compilerArguments> <verbose /> <bootclasspath>${java.home}\jre\lib\rt.jar;${java.home}\jre\lib\jce.jar</bootclasspath> </compilerArguments>
linux
<compilerArguments> <verbose /> <bootclasspath>${java.home}\jre\lib\rt.jar:${java.home}\jre\lib\jce.jar</bootclasspath> </compilerArguments>
修改完成以后,linux下打包也就正常啦。
這樣處理有一個非常明顯的缺點,在不同的環(huán)境下打包,打包前要編輯一下這個文件太麻煩了。這樣版本管理也難。那么有沒有一勞永逸的辦法,使一套配置同時支持兩個平臺呢?
最優(yōu)解
<bootclasspath>${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar</bootclasspath>
我把;替換成變量${path.separator}了。
${path.separator}在windows下就是英文符號;
${path.separator}在linux下就是英文符號:
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java自定義過濾器和攔截器實現(xiàn)ThreadLocal線程封閉
本文主要介紹了Java自定義過濾器和攔截器實現(xiàn)ThreadLocal線程封閉,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08通過jenkins發(fā)布java項目到目標主機上的詳細步驟
這篇文章主要介紹了通過jenkins發(fā)布java項目到目標主機上的詳細步驟,發(fā)布java項目的步驟很簡單,通過拉取代碼并打包,備份目標服務器上已有的要發(fā)布項目,具體內(nèi)容詳情跟隨小編一起看看吧2021-10-10MyBatis 實現(xiàn)數(shù)據(jù)的批量新增和刪除的操作
這篇文章主要介紹了MyBatis 實現(xiàn)數(shù)據(jù)的批量新增和刪除的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02java實現(xiàn)MapReduce對文件進行切分的示例代碼
本文主要介紹了java實現(xiàn)MapReduce對文件進行切分的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01