【问题标题】:How to add org.eclipse.swt (and other plugin dependencies) as an automatic Java9 module?如何将 org.eclipse.swt(和其他插件依赖项)添加为自动 Java9 模块?
【发布时间】:2018-05-26 03:58:31
【问题描述】:

为了能够将我的 Eclipse 插件“treezCore”也用作 Java9 模块,我在我的 src 文件夹中创建了一个 module-info.java。

此外,我将插件依赖项从类路径移至模块路径。我可以在插件依赖项中看到一个模块“org.eclipse.swt.3.106.1.v20170926”:

但是,我无法在我的 module-info.java 中引用该模块。我试过了

require  org.eclipse.swt.3.106.1.v20170926;
require  org.eclipse.swt;
require  swt;

这些选项都不起作用。 Eclipse使用的jar文件\plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar不包含模块定义和

jar --file org.eclipse.swt_3.106.1.v20170926-0519.jar -d

表示无法导出模块描述符。另见

Unable to derive module descriptor for auto generated module names in Java 9?

如果我从

下载更新版本的 swt.jar

http://download.eclipse.org/eclipse/downloads/drops4/R-4.7.1a-201710090410/download.php?dropFile=swt-4.7.1a-win32-win32-x86_64.zip

我得到以下看起来很有希望的输出:

swt automatic
requires java.base mandated
contains org.eclipse.swt
contains org.eclipse.swt.accessibility
contains org.eclipse.swt.awt
contains org.eclipse.swt.browser
contains org.eclipse.swt.custom
contains org.eclipse.swt.dnd
contains org.eclipse.swt.events
contains org.eclipse.swt.graphics
contains org.eclipse.swt.internal
contains org.eclipse.swt.internal.gdip
contains org.eclipse.swt.internal.image
contains org.eclipse.swt.internal.mozilla
contains org.eclipse.swt.internal.mozilla.init
contains org.eclipse.swt.internal.ole.win32
contains org.eclipse.swt.internal.opengl.win32
contains org.eclipse.swt.internal.webkit
contains org.eclipse.swt.internal.win32
contains org.eclipse.swt.layout
contains org.eclipse.swt.ole.win32
contains org.eclipse.swt.opengl
contains org.eclipse.swt.printing
contains org.eclipse.swt.program
contains org.eclipse.swt.widgets

我也依赖 org.eclipse.jface 并且找不到单独的下载。

=> 我真的必须等待使用新插件版本(包括模块定义)的 Eclipse 新版本吗?

或者我可以从插件文件夹中以某种方式引用旧版本的 swt,即使它不包含模块定义?我寻找一种简单的方法来定义别名或后备依赖项,例如

requires ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar as 'org.eclipse.swt'

requires org.eclipse.swt fallback ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar 

但是 module-info.java 似乎不支持这样的语法。

我有大约 20 个插件依赖项,不想手动下载它们(如果可能的话)并将它们作为外部 jar 文件包含在内。我也不想破解 Eclipse 插件文件夹中的单个 Manifest/jar 文件。我需要更改许多 jar 文件,而 Eclipse 的更新会破坏这种破解。

我正在为 RCP 和 RAP 开发人员使用 Eclipse,版本:Oxygen.1a Release (4.7.1a),Build id:20171005-1200

编辑

使用版本时:Photon Milestone 4 (4.8.0M4) Build id: 20171214-1849,使用时module-info.java中的错误消失

需要 org.eclipse.swt;

并且在 Modulepath 中具有插件依赖项。

但是,我的导入还没有工作,见下图。如果我将插件依赖项从模块路径移动到类路径,导入工作但 module-info.java 中的错误再次出现。

我在

创建了一个最小示例

https://github.com/stefaneidelloth/Java9EclipsePluginExample/tree/master/MyPlugin

我在

提交了错误报告

https://bugs.eclipse.org/bugs/show_bug.cgi?id=529089

相关问题:

【问题讨论】:

  • jar --file org.eclipse.swt.3.106.1.v20170926.jar -d 是否透露了什么?
  • 没有。无法确定模块描述符。无效的模块名称:'3' 不是 Java 标识符。所以我猜“显式包含的模块”列表是错误的。
  • 感谢您的链接。如果我理解正确,我必须等待新的 Eclipse 版本,因为我不是 org.eclipse.swt 的所有者并且不能(不想)修改它。
  • @Stefan True,除非您可以(愿意)修改您尝试使用的 jar。

标签: eclipse-plugin swt eclipse-rcp java-9 java-platform-module-system


【解决方案1】:

您观察到的内容在bug 525660 中进行了跟踪,首先观察到 Eclipse 的所有现有 (OSGi) 工件都不能作为自动模块工作,因为 Java 9 无法从形状org.eclipse.swt_3.106.1.v20170926-0519.jar

由于发现此问题为时已晚,无法请求改进自动模块名称派生算法,因此只能通过在未来版本的清单中添加 Automatic-Module-Name 标头来解决此问题。

此标头从 Photon M4 开始出现,如 org.eclipse.swt_3.107.0.v20171205-0742.jar 所示,包含:

自动模块名称:org.eclipse.swt

【讨论】:

  • Photon Milestone 4 (4.8.0M4) 尚未包含所有插件的 Automatic-Module-Name。例如,自动模块名称不适用于 org.eclipse.ui_3.109.100.v20171116-2149.jar 我想使用 org.eclipse.ui.forms.widgets.FormToolkit
  • 使用 org.eclipse.swt 作为模块依赖项乍一看似乎可行,因为 module-info.java 中的错误消失了。但是,我的导入还不起作用。例如,它说“类型 org.eclipse.swt.SWT”对于“import org.eclipse.swt.SWT;”是不可访问的。 jar 的访问规则允许访问 org/eclipse/swt/*。 jar org.eclipse.swt_3.107.1.v20171205-0742.jar 在 Modulepath 中的插件依赖项下显示为“不是模块化 - 不可修改”。
  • 将 swt 视为Is not modular 似乎是这里的根本原因。您能否提交一个针对 PDE 的错误(并在此处链接)?我还可以想象,由于某些插件中缺少Automatic-Module-Name 会产生不一致的组合,这会引起一些混乱。
  • 顺便说一句:旧的 access rules 和 Java 9 的“不可访问”是不相交的概念。
  • 我创建了一个最小示例并提交了一个错误,请参阅更新的问题。
猜你喜欢
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2019-12-13
  • 2021-09-02
  • 2023-04-07
  • 2019-02-12
  • 1970-01-01
相关资源
最近更新 更多