我相信使用--classpath
和--module-path
選擇在同一時間並不違法。即使沒有明確指定類路徑默認值到當前目錄,也可以同時使用兩者。從javac -help
消息
細節和javac tools docs -
--module-path <path>, -p <path>
指定查找應用模塊
--class-path <path>, -classpath <path>, -cp <path>
指定查找用戶類文件和註釋處理器
如果--class-path
,-classpath
或-cp
未指定,則用戶 類路徑爲當前目錄。
編輯:感謝@MouseEvent,我可能錯過了部分問題
但是,如果不使它們自動模塊僅僅指定 --class - path some.jar緊挨着--module-path,然後javac似乎忽略了claspath並拋出了「未找到包yyy」 和其他「未找到」錯誤。
如果你沒有讓他們自動的,它視爲一個Module System's unnamed module和 -
命名模塊不能,其實連申報於 無名模塊依賴。這種限制是有意的,因爲允許命名爲 的模塊依賴於類路徑的任意內容,因此 不可能進行可靠的配置。
此外,無名模塊導出所有包,因此在一個自動模塊的代碼將能夠訪問來自類路徑加載的任何公開的類型。
但是,使用來自類路徑的類型的自動模塊不能將這些類型暴露給依賴它的顯式模塊,因爲顯式模塊無法聲明對未命名模塊的依賴關係。
如果顯式模塊com.foo.app
代碼是指一個公共型 在com.foo.bar
,例如,以及該類型的簽名是指 類型的JAR文件仍然類路徑上一個,然後com.foo.app
中的代碼 將無法訪問該類型,因爲 com.foo.app
不能依賴未命名的模塊。
這可以通過處理com.foo.app
作爲自動模塊暫時使得其代碼可以從類路徑訪問的類型,直到這樣的時間作爲類路徑上的相關的JAR文件來補救可以被視爲一種自動模塊或轉換爲顯式模塊。
有可能混合兩者,你可以分享一個我們可以驗證的最小例子嗎? –
*我可以理解,在同一(編譯)時間使用--class-path和--module-path是非法的,*爲什麼會這樣呢? – nullpointer
混合是絕對合法的。但是,模塊化jar無法在類路徑中引用非模塊化jar。自動模塊(模塊路徑上的非模塊化jar)充當橋接器:模塊化jars_can_引用它們,自動模塊可以讀取類路徑。 –