2017-09-11 118 views
1

我想在我的項目中使用java 9模塊。我想將我的數據和服務類(名爲com.test.base的程序包)放在一個名爲(Base)的模塊中,並將其他類似於主類和GUI(名爲com.test.main的程序包)放在另一個名爲(Main)的模塊中。如何在java中聲明模塊9

  • 如何聲明簡單模塊(Base)?
  • 如何用(Base)模塊的依賴聲明模塊(Main)?
  • 我也想使用(基地)模塊與反思。

  • 假設我的根包是com.test那麼我應該在這些模塊中使用什麼目錄結構?

+4

你**閱讀文件**?如果是這樣,哪個部分讓你感到困惑?如果不是,爲什麼不呢? StackOverflow不是教學網站。 – Andreas

回答

3

jigsaw quick-start是一個很好的開始與這幫助你。回答具體問題:

如何聲明簡單模塊(Base)?

module base { 
    exports com.test.base; 
} 

這導出com.test.base包:

與定義com.test.base目錄中創建一個名爲module-info.java類。


如何申報與(基地)模塊的依賴性模塊(主)?

同其他模塊base一個com.test.main目錄中名爲module-info.java與定義類:

module main { 
    requires com.test.base; 
} 

利用導出的包。


我也想用(基地)模塊與反思。

取決於夜使用,如果API OS去除或改變上市here,那麼你可以使用--add-exports java選項作爲JEP-261

我還建議閱讀Nicolai's answerHow to solve InaccessibleObjectException ("Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}") on Java 9?一個不錯的詳細介紹有關如何在Java-9中使用反射的說明。

正確的解決方法是啓動JVM如下:

--add-opens has the following syntax: {A}/{package}={B} 
java --add-opens java.base/java.lang=ALL-UNNAMED 

如果反射代碼是一個名爲模塊中,所有命名的可以通過它的名稱所取代。


假設我的根包com.test所以應該 我使用的目錄結構爲這些模塊?

你的目錄結構應該是有點像:

src/main/java 
- com.test 
    - base 
    - module-info.java 
    - com/test/base/Main.java 
    - main 
    - module-info.java 
    - com/test/main/SimpleClass.java