【发布时间】: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我得到以下看起来很有希望的输出:
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