如何添加org.eclipse.swt(和其他插件依赖项)作为自动Java9模块?

Ste*_*fan 3 swt eclipse-plugin eclipse-rcp java-platform-module-system java-9

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

此外,我将Plug-in Dependencies从Classpath移动到Modulepath.我可以在插件依赖项中看到一个模块"org.eclipse.swt.3.106.1.v20170926":

在此输入图像描述

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

require  org.eclipse.swt.3.106.1.v20170926;
require  org.eclipse.swt;
require  swt;
Run Code Online (Sandbox Code Playgroud)

这些选项都没有奏效.Eclipse使用的jar文件\ plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar不包含模块定义,

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

说无法导出模块描述符.另见

无法在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
Run Code Online (Sandbox Code Playgroud)

我也依赖于org.eclipse.jface而无法找到它的单独下载.

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

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

requires ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar as 'org.eclipse.swt'
Run Code Online (Sandbox Code Playgroud)

要么

requires org.eclipse.swt fallback ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar 
Run Code Online (Sandbox Code Playgroud)

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

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

我正在使用Eclipse for RCP和RAP Developers,版本:Oxygen.1a Release(4.7.1a),Build id:20171005-1200

编辑

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

require org.eclipse.swt;

并在Modulepath中具有插件依赖项.

但是,我的导入功能尚未生效,请参见下图.如果我将插件依赖项从Modulepath移动到Classpath,则导入会起作用,但module-info.java中的错误会重新出现.

我创建了一个最小的例子

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

我在那里提交了一份错误报告

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

在此输入图像描述

相关问题:

Ste*_*ann 8

您在Bug 525660中跟踪了您所观察到的内容,该内容始于观察到Eclipse的所有现有(OSGi)工件都不能用作自动模块,因为Java 9无法从形状的jar文件名派生有效的模块名称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