是否可以在 Java 9 模块中使用没有模块信息的依赖项.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

模块信息.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; - 见这里)。

最新更新