是否可以在没有模块信息的情况下使用依赖项.class在 Java 9 模块中

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

├── 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

失败是因为找不到。当我编译没有模块信息的项目时.java,一切都像往常一样工作。Test

是否可以以某种方式使用来自 Java 9 模块中非 Java 9 模块的 jar 中的类?特别是对于依赖于第三方项目(例如apache-commons,...)的项目,我认为需要这样的东西。


答案 1

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

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

然后,您可以要求它使用给定的名称(例如 - 见这里)。require guava;


答案 2

推荐