我正在使用Netbeans開發我的項目,我最近發現一個jar文件中的類遮蓋了另一個具有相同名稱的文件,如何解決這個問題?如何解決被jar文件蓋過的類的問題?
我有一個名爲DB_Tools_Panel項目,它具有以下結構:
src/ : DB_Tools_Panel.java
Utility/ : Tools_Lib.java
所以裏面的src目錄有一個文件:DB_Tools_Panel.java,並在src目錄有一個叫做效用目錄,在Utility裏面有一個名爲Tools_Lib.java的文件。
我包裝這個項目到一個JAR文件:DB_Tools_Panel.jar
然後我創建了一個第二項目飛度,它具有以下結構:
src/ : Fit.java
Utility/ : Tools_Lib.java
lib/ : DB_Tools_Panel.jar
它採用DB_Tools_Panel.jar,所以DB_Tools_Panel。 jar在Fit的lib目錄中,但現在當我在Fit/src/Utility中更改Tools_Lib.java並運行它時,什麼也不會發生,就好像它從未改變過,現在我知道原因了,因爲JVM只運行Tools_Lib.java從包DB_Tools_Panel.jar中,它不會在Fit/src/Utility中看到Tools_Lib.java,換句話說,在將DB_Tools_Panel.jar包含到Fit項目後, DB_Tools_Panel.jar中的Tools_Lib.java將遮蓋Fit/src/Utility中的Tools_Lib.java。
這兩個地方的Tools_Lib.java是同一個文件,但Fit/src/Utility中的Tools可能更高級,有時候我測試DB_Tools_Panel並確保它正常工作並將其打包到jar文件中,並在其他項目中使用它,Utility/Tools_Lib.java用於稍後的項目中,並且需要改進,但我不一定要總是返回到DB_Tools_Panel.jar並更新其中的Tools_Lib.java。
所以我的問題是:
[1]在此情況下,纔有可能有2個不同的Tools_Lib.java文件在信託基金項目,之一,飛度/ src目錄/工具/,另外在飛度/ lib目錄/DB_Tools_Panel.jar並且不會導致衝突,我的意思是:當Fit調用Tools_Lib.java時,將使用src/Utility /中的一個,並且當Fit中的某個方法調用DB_Tools_Panel時,將使用DB_Tools_Panel的Tools_Lib.java在DB_Tools_Panel的方法中。
[2]爲什麼DB_Tools_Panel.jar中的Tools_Lib.java掩蓋Fit/src/Utility中的Tools_Lib.java?
如何讓2個Tools_Lib.java不同,並且仍然可以在 Fit/src/Utility中改變它,並在Fit項目中使用它,就好像DB_Tools_Panel.jar中的那個不一樣存在嗎?
你爲什麼給他們同名?爲這兩個類使用適當的包,可能會有大量的Tool_Lib。更好的是:給他們更有意義的名字! –
搜索順序決定搜索順序。一個jar永遠不會在搜索順序中與包含類文件的目錄位於同一個槽中 - 一個必須先於另一個。找出您的搜索順序。但是請注意,不能使用單獨的類加載器同時加載兩個同名的類(並且很難同時引用這兩個類)。 –