我创建了两个小项目 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,......),我认为需要这样的东西。
答案 0 :(得分:11)
是的,有可能。您要找的是automatic modules。
要创建一个,您只需将常规JAR放入模块路径中提及的文件夹中(例如guava-19.0.jar
中的libs
- 请参阅{{3} })。这告诉JVM从中创建一个模块。该模块将根据文件名(在本例中为guava
)获取名称,将读取所有其他模块,并导出其所有包。
然后,您可以使用它的名称来要求它(例如require guava;
- 请参阅my example project)。