是否可以在Java 9模块中使用不带module-info.class的依赖项
我创建了两个小项目de.app1和de.app2 ,其中来自de.app1的 App
使用来自de.app2的 Test
。
├── de.app1 │ ├── de │ │ └── app │ │ └── App.java │ └── module-info.java └── de.app2 └── de └── test └── Test.java
第一个项目中的module de.app1 {}
只包含module de.app1 {}
我编译了第二个项目并创建了一个jar文件:
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
失败,因为无法找到Test
。 当我在没有module-info.java的情况下编译项目时,一切正常。
是否有可能在Java 9模块中使用不是Java 9模块的jar中的类? 特别是对于依赖第三方项目的项目(例如apache-commons,……),我认为需要这样的东西。
对的,这是可能的。 您正在寻找的是自动模块 。
要创建一个,您只需将常规JAR放入模块路径中提到的文件夹中(例如,文件夹libs
中的guava-19.0.jar
– 请参阅我的示例项目 )。 这告诉JVM从中创建一个模块。 该模块将根据文件名(在本例中为guava
)获取名称,将读取所有其他模块,并导出其所有包。
然后你可以用它给出的名称来要求它(例如require guava;
– 见这里 )。