adi*_*zen 3 eclipse modular apache-poi java-11 javafx-11
自从我做 Java 编程以来已经有一段时间了,我很惊讶地回到它,因为整个项目对我来说都是陌生的。
我在混合模块化和非模块化环境中使用 Eclipse (2018-09, 4.9.0) 标准 Java 项目时遇到问题。具体来说,我正在尝试使用 Eclipse 平台(没有 Gradle 或 Maven 的基础 Java 项目)结合 JavaFX 11(模块化)和 Apache POI 4.1(非模块化)。
在我的 module-info.java 中,我有以下内容,
module myapp {
requires javafx.base;
requires javafx.graphics;
requires javafx.fxml;
requires javafx.controls;
requires javafx.web;
exports myapp.gui;
opens myapp.gui to javafx.fxml;
}
Run Code Online (Sandbox Code Playgroud)
我发现无论我在哪里有 Apache POI 代码,我都会在 Eclipse 中收到以下错误
The import cannot be resolved
Run Code Online (Sandbox Code Playgroud)
使用为 Apache POI 创建的自动模块在 module-info.java 中添加以下内容,
requires poi;
Run Code Online (Sandbox Code Playgroud)
在 Eclipse 中产生一个警告,表明自动模块不稳定,这似乎被识别但继续产生无法解决的错误。
我还尝试将主要的 POI jar 文件放在类路径中,与模块路径相反,但无济于事。
涉及与 UI 分离的 Apache POI 的代码有效。我只需要删除 module-info.java 的使用,我认为它会将项目置于某种没有模块化的遗留开发模式中?
有人可以告诉我我做错了什么,并指导我设置一个混合模块化和非模块化库的项目吗?
提前致谢。
如果您module-info.java在默认包中有一个文件,您的代码将被封装在一个模块中。要在模块中使用 JAR 的内容,
module-info.java:requires <module_name>;。否则无法解析import语句。类路径上的任何项目都不能从模块访问;并且Modulepath 上没有requires ...in 的任何内容module-info.java都不能在模块中使用。因此,在您的情况下,如果没有requires poi;(并且没有Modulepath上的 POI 库),它将无法工作。
在“自动模块名称‘...’不稳定”的警告只是一个提示,即POI JAR还没有建成一个模件,但作为一个模块。实际上,这意味着如果您重命名 JAR 文件,模块名称也会更改,您必须修改module-info.java文件。从技术上讲,POI JAR 既不包含module-info.class文件,也不包含META-INF/MANIFEST.MF带有Automatic-Module-Name: .... 所以模块名poi是从 JAR 的文件名派生而来的。在“自动模块名称‘...’是不稳定的”警告可以在关闭项目>属性:Java编译器>错误/警告的模块部分。
总而言之,您没有混合的模块化和非模块化依赖项。相反,遗留 JAR 通过从文件名派生模块名自动成为模块。在这种情况下,Eclipse 默认会警告您,只需更改该 JAR 的文件名即可破坏应用程序。
| 归档时间: |
|
| 查看次数: |
2400 次 |
| 最近记录: |