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

标签 eclipse apache-poi java-11 modular 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;
}

我发现无论我有 Apache POI 代码,我都会在 Eclipse 中收到以下错误
The import cannot be resolved

使用为 Apache POI 创建的自动模块在 module-info.java 中添加以下内容,如下所示,
        requires poi;

在 Eclipse 中产生一个警告,表明自动模块不稳定,这似乎被识别但继续产生无法解决的错误。

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

涉及与 UI 分离的 Apache POI 的代码有效。我只需要删除 module-info.java 的使用,我认为它会将项目置于某种遗留开发模式中,没有模块化?

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

提前致谢。

最佳答案

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

  • JAR 必须位于模块路径
  • 该模块必须根据需要显式声明module-info.java : requires <module_name>; .

  • 否则,导入语句无法解析。 Classpath 上的任何项目都无法从模块访问;如果没有 requires ...,Modulepath 上什么都没有在 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 的文件名即可破坏该应用程序。

    关于eclipse - 使用 Java 11 在 Eclipse 中混合模块化和非模块化开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55638253/

    相关文章:

    java - 无法让StreamingReader与Excel xlsx Java一起使用

    maven - 如何将 "--add-exports"编译器指令添加到 Maven 编译中

    java - 添加 JDK 11 时出现 Eclipse 氧气 4.7 错误 - 目标目录不是 JDK 根目录

    java - Tomcat:自定义错误页面不起作用

    java - 从 Apache 的 POI 工作簿获取 InputStream

    Netbeans 中的 Java 代码可以工作,但通过 cmd 提示符执行 jar 会出现 nosuchmethod 错误异常

    java - 如何处理 JPA 注释 @ManytoMany

    android - 好的android图形布局编辑器

    java - PagerSlidingTabStrip 打开时出错

    java - Eclipse 3.5 无法安装插件