2017-10-12 124 views
6

我有一些java9模塊使用不是Java9模塊的第三方庫,只是一個簡單的實用程序jar。如何在Java9模塊中使用第三方庫?

但是,編譯器抱怨說它無法從我的實用程序中找到軟件包。

我應該怎麼做module-info.java以啓用我的第三方庫?

回答

5

您可以使用自己的庫作爲自動模塊。自動模塊是沒有模塊描述符的模塊(即module-info.class)。但是你應該用什麼名字來指代這個模塊?自動模塊的名稱來自JAR名稱(除非此JAR包含Automatic-Module-Name屬性)。完整的規則很長(請參閱Javadoc的ModuleFinder.of),所以爲了簡單起見,您只需從名稱中刪除版本,然後用點替換所有非字母數字字符(.)。

例如,如果你想使用foo-bar-1.2.3-SNAPSHOT.jar,你需要添加下面一行到module-info.java

module <name> { 
    requires foo.bar; 
} 
+1

謝謝!有趣的是我做到了,但是我的IntelliJ仍然在抱怨。在重新啓動IDEA後,沒有更多的問題。感謝名單! – igr

+0

在某些情況下,不能派生出模塊描述符。有沒有辦法定義一個別名來覆蓋無效的自動名稱而不需要改變第三方庫?另請參閱https://stackoverflow.com/questions/46501388/unable-to-derive-module-descriptor-for-auto-generated-module-names-in-java-9 – Stefan

+0

@Stefan更改jar名稱不是一個選項? – ZhekaKozlov

2

只是把簡單的步驟,使用第三方JAR(例如低於log4j-api-2.9.1.jar)在你的模塊: -

  1. 執行的jar工具的描述符命令

    jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module 
    

    這會爲您提供類似

    沒有找到模塊描述符的輸出。衍生automatic module

    log4j.api @ 2.9.1自動

  2. 在你module-info.java,申報requires該模塊的名稱爲: -

    module your.module { 
        requires log4j.api; 
    } 
    

    就是這樣。

相關問題