正如標題所說,我正在 github 中尋找一個簡單的示例,其中包含一個代碼示例,該示例顯示了當一個應用程式中必須包含兩個版本的庫時如何使用 [maven-shade-plugin] 重命名類。

同時,我開始創建這個示例的 on 版本,如果沒有人指出我,我將發布我創建的內容。
我找到了幾個描述插件的網頁,但沒有包含指向帶有示例代碼的存盤庫的指標。
關于 maven-shade-plugin 的一些有用的文章
插件檔案:

每個 pom 檔案都會創建一個 JAR 檔案,因此此代碼示例創建了 4(四個)jar 檔案。
問題總結
下圖顯示了在主應用程式 (helloworld) 中使用的 loglib.jar 檔案

它顯示該類
LogIt包含一個方法,該方法在包的版本 1.0.0 (liblog.jar)sayHello中采用一個引數字串名稱sayHello,并在包的第二個版本中采用兩個引數。雖然此示例旨在演示 Java 開發人員在更復雜的代碼庫上面臨的一般問題,但此問題的簡化版本旨在使問題易于理解和修復。
因此,默認情況下,當為HelloWorld應用程式創建 FAT jar 時,Fat jar 僅包含類檔案的一份副本
com.steranka.play.LogIt。結果是要么HelloWorld類崩潰,要么GoodFeature類崩潰。崩潰意味著拋出例外 下面是我第一次運行應用程式時看到的例外示例。Hello World! What's up, Sam Exception in thread "main" java.lang.NoSuchMethodError: 'java.lang.String com.steranka.play.LogIt.sayHello(java.lang.String)' at com.steranka.play.GoodFeature.sayGoodbye(GoodFeature.java:6) at com.steranka.play.HelloWorldApp.main(HelloWorldApp.java:15)出現此問題是因為使用了包含簽名的 loglib.jar 版本 2.0.0:
sayHello(String name, String greeting)并且代碼中
GoodFeature.sayGoodbye有位元組碼,它呼叫簽名的 1.0.0 版本,它是:sayHello(String name)由于該簽名不存在,因此發生了例外。
解決方案
解決方案是包含兩個版本的
loglibjar 檔案,如下圖所示。
下一步
如果您想跟隨我所做的作業,并了解我如何解決此問題,請在此處繼續使用 doc/01-Starting.md檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510016.html上一篇:Maven-shade-plugin檢測到某些類檔案存在于兩個或多個JAR中
下一篇:使用Java和SpringBoot以及我的application-dev.properties的@Value注釋沒有得到解決?
