【问题标题】:How to make an internal Java package accessible in Eclipse?如何使内部 Java 包在 Eclipse 中可访问?
【发布时间】:2018-09-21 17:03:53
【问题描述】:

我在 Eclipse 中使用 Java 11(或 Java 10)打开了一个旧版 Java (8) 项目。 Eclipse 现在正确地抱怨无法访问的包。例如。 com.apple.laf.AquaComboBoxUI.

从命令行编译时,我可以通过向javac 添加参数来显式访问这些包:

--add-exports java.desktop/com.apple.laf=ALL-UNNAMED

有没有办法在 Eclipse IDE 中做同样的事情?我试图在 JDK 库上添加一个可访问的规则。但这似乎没有任何效果。有什么想法吗?

是的,我知道,我们应该迁移项目以仅使用官方 API。但这是一个很长很长的路......

【问题讨论】:

  • UIManager.createLookAndFeel 是获取内置外观参考的有用方法。
  • @AlanBateman 你如何获得UIManager.createLookAndFeel 的必要名称?我只知道UIManager.getSystemLookAndFeelClassName(),适合UIManager.setLookAndFeel,但是createLookAndFeel似乎期待的是“名字”而不是类名……

标签: java eclipse legacy-code java-11


【解决方案1】:

我正在回答我自己的问题,因为我找到了解决方案。

  1. 在 Eclipse 设置中导航到:Java Build PathLibrariesModulepathJRE System Library
  2. 展开并双击:模块化(修改封装)
  3. 切换到详细信息标签
  4. 添加新的导出:例如java.desktopcom.apple.laf

【讨论】:

  • 我有同样的问题,但以不同的方式修复。在第 3 步中,停留在“目录”选项卡中,然后在“隐式包含的模块”框中找到相关库,选中它,然后单击向上箭头按钮将其移动到“显式包含的模块”框中。对我来说,我必须使用java.naming 来执行此操作,以便在javax.naming 中导入类)
  • 实际上无视我上面所说的......它可以编译,但后来我在运行时出错。最终对我来说,原来是因为我已经更新了构建的 jdk 版本,但是启动时 tomcat 仍然使用旧的 jdk 版本
  • 我遇到了同样的问题,我在项目的 lib/jars 文件夹中有模块 lwjgl.jar,我正在尝试 import org.lwjgl.opengl.Display; 并收到相同的无法访问的消息 - 这个答案看起来就像我能找到的最接近的一样,但我对要做什么出口感到困惑。在Source modulePackage 字段中输入什么?它似乎无法识别 lwjgl 或我尝试过的其他任何东西。
  • 想通了,我需要在我的module-info.java 文件中包含requires lwjgl; 行:/
【解决方案2】:

您需要设置问题严重性。这属于forbidden reference (access rules)Java Compiler -> Errors/Warnings 下。

【讨论】:

  • 不幸的是,这没有帮助。供参考:Eclipse 中的错误消息是“com.apple.laf.AquaComboBoxUI 类型不可访问”。
  • 请再次查看。在发布答案之前,我在一个干净的项目上进行了尝试。
【解决方案3】:

here 所述,您可以通过以下步骤将命令行中使用 javac 传递的参数添加到 Eclipse:

  • 点击Run->Run Configurations

  • 在出现在Main tabBrowse the project 和您要为其传递参数的Main class 下的窗口中。

  • 现在单击Arguments 选项卡。
  • 在标有Program arguments: 的文本框中,输入${string_prompt}
  • 点击Apply and Close

现在,当您运行 Java 应用程序时,会出现一个提示。您可以在此处添加用空格分隔的所有参数。

【讨论】:

  • 这些参数不会传递给 java 编译器,而是传递给 java 运行时 (java)。因此,它们仅在执行期间影响您的应用程序。它们对 IDE 中的内置编译器没有影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 2014-07-16
  • 2022-01-28
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多