如何将 org.eclipse.swt(和其他插件依赖项)添加为自动 Java9 模块?
How to add org.eclipse.swt (and other plugin dependencies) as an automatic Java9 module?
为了能够将我的 Eclipse 插件 "treezCore" 也用作 Java9 模块,我在我的 src 文件夹中创建了一个模块-info.java。
此外,我将插件依赖项从类路径移到了模块路径。我可以在插件依赖项中看到一个模块 "org.eclipse.swt.3.106.1.v20170926":
但是,我无法在我的模块-info.java 中引用该模块。我试过了
require org.eclipse.swt.3.106.1.v20170926;
require org.eclipse.swt;
require swt;
None 这些选项有效。 Eclipse使用的jar文件\plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar不包含模块定义和
jar --file org.eclipse.swt_3.106.1.v20170926-0519.jar -d
说无法导出模块描述符。另见
如果我从
下载更新版本的 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时,模块-info.java中的错误在使用
时消失
需要org.eclipse.swt;
并在模块路径中具有插件依赖项。
但是,我的导入还不起作用,请参见下图。如果我将插件依赖项从模块路径移动到类路径,导入工作但 module-info.java 中的错误再次出现。
我在
创建了一个最小示例
https://github.com/stefaneidelloth/Java9EclipsePluginExample/tree/master/MyPlugin
我在
提交了错误报告
https://bugs.eclipse.org/bugs/show_bug.cgi?id=529089
相关问题:
Force Eclipse (Helios) to use a newer version of SWT at application runtime
JFace libraries stand-alone download (not picked from Eclipse plug-ins)
您观察到的内容在 bug 525660 中进行了跟踪,它首先观察到 Eclipse 的所有现有 (OSGi) 工件都不能作为自动模块工作,因为 Java 9 无法派生一个来自形状为 org.eclipse.swt_3.106.1.v20170926-0519.jar
.
的 jar 文件名的有效模块名称
由于发现此问题已太晚,无法请求改进自动模块名称派生算法,因此只能通过在未来版本的清单中添加 Automatic-Module-Name
header 来解决此问题。
此 header 从 Photon M4 开始出现,如 org.eclipse.swt_3.107.0.v20171205-0742.jar 中所示,包含:
Automatic-Module-Name: org.eclipse.swt
为了能够将我的 Eclipse 插件 "treezCore" 也用作 Java9 模块,我在我的 src 文件夹中创建了一个模块-info.java。
此外,我将插件依赖项从类路径移到了模块路径。我可以在插件依赖项中看到一个模块 "org.eclipse.swt.3.106.1.v20170926":
但是,我无法在我的模块-info.java 中引用该模块。我试过了
require org.eclipse.swt.3.106.1.v20170926;
require org.eclipse.swt;
require swt;
None 这些选项有效。 Eclipse使用的jar文件\plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar不包含模块定义和
jar --file org.eclipse.swt_3.106.1.v20170926-0519.jar -d
说无法导出模块描述符。另见
如果我从
下载更新版本的 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时,模块-info.java中的错误在使用
时消失需要org.eclipse.swt;
并在模块路径中具有插件依赖项。
但是,我的导入还不起作用,请参见下图。如果我将插件依赖项从模块路径移动到类路径,导入工作但 module-info.java 中的错误再次出现。
我在
创建了一个最小示例https://github.com/stefaneidelloth/Java9EclipsePluginExample/tree/master/MyPlugin
我在
提交了错误报告https://bugs.eclipse.org/bugs/show_bug.cgi?id=529089
相关问题:
Force Eclipse (Helios) to use a newer version of SWT at application runtime
JFace libraries stand-alone download (not picked from Eclipse plug-ins)
您观察到的内容在 bug 525660 中进行了跟踪,它首先观察到 Eclipse 的所有现有 (OSGi) 工件都不能作为自动模块工作,因为 Java 9 无法派生一个来自形状为 org.eclipse.swt_3.106.1.v20170926-0519.jar
.
由于发现此问题已太晚,无法请求改进自动模块名称派生算法,因此只能通过在未来版本的清单中添加 Automatic-Module-Name
header 来解决此问题。
此 header 从 Photon M4 开始出现,如 org.eclipse.swt_3.107.0.v20171205-0742.jar 中所示,包含:
Automatic-Module-Name: org.eclipse.swt