2017-06-16 15 views
3

JDK9將(可能)引入一個模塊系統。作爲其中的一部分,Java類庫將被模塊化。什麼是JDK9中的預定義模塊或需要哪個模塊來修復依賴關係問題?

當類未找到時,可能會導致異常,因爲它們位於尚未指定爲依賴項的模塊中。

將使用模塊系統創建哪些模塊以及它們各自的內容是什麼?

或者換個說法:給定一個沒有加載的類,如何找到合適的模塊作爲依賴包含?

+4

'jdeps --list -deps' – ZhekaKozlov

+1

我會注意到,您在標題中提出了多個問題,第一個問題是無關緊要的問題(根據[導覽](https://stackoverflow.com/tour)),因爲它是一個列表請求東西的。 –

回答

6

如何找到合適的模塊作爲依賴包含?

考慮這個惡搞類:

import java.sql.DriverManager; 
import java.rmi.RemoteException; 

public class UserDao { 
    DriverManager driverManager = null; 

    public void service() throws RemoteException { 
     if (true) { 
      throw new RemoteException(); 
     } 
    } 
} 

讓我們假設這個類被編譯成user-dao.jar。該jdeps工具(使用9ea170)答案:

jdeps --list-deps user-dao.jar 
    java.base 
    java.rmi 
    java.sql 

(請注意,隨JDK 8 jdeps,但更適合在JDK 9)

爲了完整起見,如果你知道這些代碼的用途一個特定的類別(例如java.sql.DriverManager),你懷疑一個模塊需要(如java.sql),人們可以通過the doc確認的模塊,或者在命令行(與9ea170再次):

bash$ java --describe-module java.sql 
[email protected] 
exports java.sql 
exports javax.sql 
exports javax.transaction.xa 
requires java.xml transitive 
requires java.base mandated 
requires java.logging transitive 
uses java.sql.Driver 
+1

謝謝。更新了鏈接。 –

2

模塊的完整列表可以在這裏找到。 http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html

它列出了構成Java類庫的73個模塊。對於每一個,都有一個包含的軟件包列表以及它依賴的其他模塊列表。

給定一個未加載的類,可以搜索該站點上的包名稱的開始,以確定要依賴的模塊。