2017-07-28 23 views

回答

2

如果您未定義模塊信息,IDEA會在類路徑上設置應用程序和依賴關係。由於你有一個模塊信息它是一個明確的模塊,所以它必須在模塊路徑。通常你會把你的依賴作爲自動模塊來處理。

無論如何,你的依賴至少有一個很好的理由在類路徑上。我們在這裏討論了Why Java 9 does not simply turn all JARs on the class path into automatic modules?

例如,mymodule依賴於一個自動模塊,但它需要一個不能成爲自動模塊的jar。在命令行上,它會這樣:

java -cp legacy.jar -p「mymodule.jar; automodule.jar;」 -m mymodule/com.example.mymodule.Application

IMO intellij目前不支持。作爲至少在類路徑上運行整個應用程序的解決方法,您可以重新命名模型信息以禁用/暫時不成爲拼圖模塊。

+2

我理解這個問題意味着他更喜歡從類路徑運行整個項目。爲什麼?誰知道,也許是爲了測試兼容性。也許是爲了避免不適合轉變爲自動模塊的依賴關係的問題(例如,因爲他們拆分了一個包)。 – Nicolai

+0

是的,我編輯了我的答案 – Daniel

+0

我不認爲這個問題是答案 - 就我所見,IntelliJ在使用JDK9時不提供使用classpath而不是模塊路徑的選項。這樣做的原因是什麼?實際上,整個Java生態系統都與模塊不兼容 - 所有主要開源項目中都有拆分包,無效的模塊名稱(任何包含netty,cassandra等本機詞的jar)都在這裏。現在使用模塊是一場艱苦的戰鬥,任何人都不想戰鬥。 –

相關問題