1 回答

TA貢獻1909條經驗 獲得超7個贊
這不是 Docker 問題,而是 Java 問題。有多種方法可以定義類路徑條目來運行可執行 jar。
陰影或 Uber jar 方法
在這種情況下,您應該創建一個陰影 jar,其中包含一個可執行 jar 文件中的所有依賴類。Maven 有一個名為Apache Maven Shade Plugin 的插件來創建 uber-jar 工件。
最后運行:
java?-jar?shaded-artifact.jar
或者在 Docker 中
CMD?["java",?"-jar",?"shaded-artifact.jar"]
命令行類路徑方法
如果創建的 jar 工件需要存在其他(依賴的)jar,則您必須指定類路徑。在這種情況下,將所有必需的 jar 復制到文件夾(例如lib)中并使用以下命令:
java?-cp?'<name-of-jar.jar>:<path-of-dependencies>'?<fully.quialified.main.ClassName>
正如您所看到的,通配符 (*) 字符和多個類路徑元素允許用:
?so分隔
java?-cp?'Customer.jar:libs/*'?com.mycompany.Customer
在 Docker 中
CMD?["java",?"-cp",?"Customer.jar:libs/*",?"com.mycompany.Customer"]
MANIFEST 方法中的類路徑
將所有這些依賴工件收集到一個文件夾后,您只需在META-INF/MANIFEST.MFClass-Path
文件中添加一個條目,如下所示:
Class-Path:?.?lib/*
并運行
java?-jar?Customer.jar
或者在 Docker 中
CMD?["java",?"-jar",?"Customer.jar"]
其中哪一個最好取決于很多因素,你必須做出選擇。
編輯:
根據更新的問題, uber jar 似乎是由程序集插件使用jar-with-dependencies預定義描述符創建的。這將創建另一個 jar 文件,該文件放置在目標(輸出)文件夾下,其名稱以-jar-with-dependencies.jar
使用該罐子代替基本工件。
仔細檢查以確保所有
<mainClass>
條目都指向現有的類。您在同一問題中提到了三個不同的主類。
com.公司名稱.客戶
com.mycompany.Customer
com.company.customers.Customer
注意Linux和Java都是區分大小寫的。在此基礎上,類名必須準確無誤Customer
,所有文件夾名稱必須小寫。
希望能幫助到你。
添加回答
舉報