14

我创建了两个小项目de.app1de.app2,其中Appde.app1使用de.app2Test

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

第一个项目中的module-info.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找不到而失败。当我在没有module-info.java的情况下编译项目时,一切都照常工作。

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

4

1 回答 1

15

对的,这是可能的。您正在寻找的是自动模块

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

然后,您可以使用它被赋予的名称来要求它(例如require guava;- 参见此处)。

于 2016-07-08T19:57:46.617 回答