是否可以在Java 9模块中使用不带module-info.class的依赖项

时间:2016-07-08 14:51:39

标签: java java-9 jigsaw

我创建了两个小项目 de.app1 de.app2 ,其中来自 de.app1 App使用{{ 1}}来自 de.app2

Test
第一个项目中的

module-info.java 只包含├── de.app1 │   ├── de │   │   └── app │   │   └── App.java │   └── module-info.java └── de.app2 └── de    └── test    └── Test.java

我编译了第二个项目并创建了一个jar文件:

module de.app1 {}

然后尝试编译第一个项目:

javac de/test/Test.java
jar cf app2.jar de/test/Test.class

失败,因为无法找到javac -cp ../de.app2/app2.jar de/app/App.java module-info.java 。当我在没有 module-info.java 的情况下编译项目时,一切正常。

是否有可能在Java 9模块中使用不是Java 9模块的jar中的类?特别是对于依赖第三方项目的项目(例如apache-commons,......),我认为需要这样的东西。

1 个答案:

答案 0 :(得分:11)

是的,有可能。您要找的是automatic modules

要创建一个,您只需将常规JAR放入模块路径中提及的文件夹中(例如guava-19.0.jar中的libs - 请参阅{{3} })。这告诉JVM从中创建一个模块。该模块将根据文件名(在本例中为guava)获取名称,将读取所有其他模块,并导出其所有包。

然后,您可以使用它的名称来要求它(例如require guava; - 请参阅my example project)。