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