2016-05-31 70 views
20

我剛開始看看Java 9模塊系統,我在想是否有可能讓類知道它位於哪個模塊中。方法getModule返回已命名模塊中的類的未命名模塊

爲此我創建了以下模塊

module de.test { 
    exports de.test.myexport; 
} 

和編譯的JAR文件看起來像

> jar --print-module-descriptor --file=Java9Test-1.0-SNAPSHOT.jar         

de.test 
    requires mandated java.base 
    exports de.test.myexport 

在包de.test,我有一個類叫做Overview這裏我打電話

Module module = Overview.class.getModule(); 

但是,返回的模塊對象未命名並且沒有ModuleDescriptor

我在這裏正確使用getModule(),還是有任何其他方式來加載類的模塊?

我使用JDK 9構建120在OS X

+1

WOW,Java9正在通過Stiftung Warentest測試[:-) –

回答

17

類路徑上的所有的JAR(與java --class-path ...)獲得捆綁到同一個所謂unnamed module,不管他們是否是「真正的模塊」或「只是一個JAR」。當你從這樣一個JAR中爲它的模塊提問時,你會得到你描述的結果。

嘗試將JAR放在模塊路徑(java --module-path ...)和Class::getModule應該返回您所期望的。

+3

謝謝,它的工作原理與您所描述的完全相同。然而,對我來說,根據類的執行方式,「Class :: getModule」的行爲有所不同。 –