使用 Java 11 在 Eclipse 中进行混合模块化和非模块化开发



自从我做Java编程以来已经有一段时间了,我很惊讶地回到它,整个景观对我来说是陌生的。

我在混合模块化和非模块化环境中使用 Eclipse(2018-09,4.9.0)标准 Java 项目时遇到问题。具体来说,我正在尝试使用Eclipse平台(没有Gradle或Maven的基础Java项目)将JavaFX 11(模块化)和Apache POI 4.1(非模块化)结合起来。

在我的模块信息中.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;
}

我发现无论我在哪里都有Apache POI代码,我都会在Eclipse中收到以下错误

The import cannot be resolved

在模块信息中添加以下内容.java使用为 Apache POI 创建的自动模块,如下所示,

requires poi;

在 Eclipse 中生成警告,指示自动模块不稳定,该警告似乎被识别,但继续产生无法解决的错误。

我还尝试将主 POI jar 文件放在类路径中,而不是模块路径,但无济于事。

涉及与UI分离的Apache POI的代码有效。我只需要删除模块信息的使用.java我认为它将项目置于某种没有模块化的传统开发模式?

有人可以给我一个关于我做错了什么的指示,并指导我设置一个混合模块化和非模块化库的项目吗?

提前谢谢。

如果默认包中有module-info.java文件,则代码将封装在模块中。要在模块中使用一些 JAR 的东西

  • JAR 必须位于模块路径,并且
  • 模块必须在module-info.javarequires <module_name>;中显式声明为必需的。

否则,无法解析导入语句。类路径上的任何项都无法从模块访问;并且模块路径上没有requires ...的任何内容都不能在模块中使用module-info.java。因此,在您的情况下,如果没有requires poi;(并且没有模块路径上的 POI 库),它将无法工作

"自动模块的名称"..."不稳定">警告只是一个提示,POI JAR没有作为模块构建,而是用作模块。实际上这意味着,如果重命名JAR文件,模块名称也可以更改,并且必须调整module-info.java文件。从技术上讲,POI JAR既不包含module-info.class文件,也不包含行Automatic-Module-Name: ...META-INF/MANIFEST.MF文件。因此,模块名称poi派生自 JAR 的文件名。"自动模块的名称"..."不稳定">警告可以在">模块"部分中的">项目>属性:Java 编译器>错误/警告"中关闭。

总而言之,您没有混合的模块化和非模块化依赖项。相反,旧版 JAR 通过从文件名派生模块名称来自动成为模块。在这种情况下,Eclipse 缺省情况下会警告您,只需更改该 JAR 的文件名即可破坏应用程序。

所以,事实证明。我确实搞砸了。POI库中有5个相互依赖的jar文件,该文件导致错误"无法解析导入">

一旦我在模块信息中包含所有 5 个文件.java项目就编译了。

requires poi.excelant;
requires poi.ooxml;
requires poi.ooxml.schemas;
requires poi.scratchpad;
requires poi;

我确信并非所有这些都是必要的,但我包括了所有这些以防万一。

感谢大家的阅读,并肯定我没有做任何事情来破坏Eclipse。

相关内容

  • 没有找到相关文章

最新更新