是否可以在 Java 9 模块中使用不带 module-info.class 的依赖项
Is it possible to use dependencies without module-info.class in a Java 9 module
我创建了两个小项目 de.app1 和 de.app2,其中 App
来自 de.app1 使用 de.app2.
中的 Test
├── 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 方项目的项目(例如 apache-commons,...),我认为需要这样的东西。
是的,这是可能的。您要找的是 automatic modules.
要创建一个,您只需将常规 JAR 放入您在 模块路径 中提到的文件夹中(例如 guava-19.0.jar
在文件夹 libs
中 -参见 my example project)。这告诉 JVM 从中创建一个模块。该模块将根据文件名获得一个名称(在本例中为 guava
),将读取所有其他模块,并导出其所有包。
然后您可以使用指定的名称要求它(例如 require guava;
- 参见 here)。
我创建了两个小项目 de.app1 和 de.app2,其中 App
来自 de.app1 使用 de.app2.
Test
├── 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 方项目的项目(例如 apache-commons,...),我认为需要这样的东西。
是的,这是可能的。您要找的是 automatic modules.
要创建一个,您只需将常规 JAR 放入您在 模块路径 中提到的文件夹中(例如 guava-19.0.jar
在文件夹 libs
中 -参见 my example project)。这告诉 JVM 从中创建一个模块。该模块将根据文件名获得一个名称(在本例中为 guava
),将读取所有其他模块,并导出其所有包。
然后您可以使用指定的名称要求它(例如 require guava;
- 参见 here)。