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

Eclipse plugin 如何将org.eclipse.swt(和其他插件依赖项)添加为自动Java9模块?,eclipse-plugin,swt,eclipse-rcp,java-9,java-platform-module-system,Eclipse Plugin,Swt,Eclipse Rcp,Java 9,Java Platform Module System,为了能够将我的Eclipse插件“treezCore”也用作Java9模块,我在src文件夹中创建了module-info.java 此外,我将插件依赖项从类路径移动到Modulepath。我可以在插件依赖项中看到一个模块“org.eclipse.swt.3.106.1.v20170926”: 但是,我无法在module-info.java中引用该模块。我试过了 require org.eclipse.swt.3.106.1.v20170926; require org.eclipse.s

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

此外,我将插件依赖项从类路径移动到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;
这些选项都不起作用。eclipse使用的jar文件\plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar不包含模块定义和

jar——文件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新版本吗

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

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

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

我有大约20个插件依赖项,不想手动下载它们(如果可能的话)并将它们作为外部jar文件包含。我也不想破解Eclipse插件文件夹中的单个清单/jar文件。我需要修改很多jar文件,而Eclipse的更新将打破这一漏洞

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

编辑

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

需要org.eclipse.swt

以及在Modulepath中具有插件依赖项

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

我在上创建了一个min示例

我在

相关问题:


您观察到的内容在中得到了跟踪,这首先是观察到Eclipse的所有现有(OSGi)工件都不能作为自动模块工作,因为Java 9无法从org.Eclipse.swt_3.106.1.v20170926-0519.jar形状的jar文件名中派生出有效的模块名

由于发现这一点太晚,无法要求改进自动模块名称派生算法,因此只能通过在未来版本的清单中添加
自动模块名称
头来解决这一问题

此标题从光子M4开始出现,如中所示,包含:

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


jar--org.eclipse.swt.3.106.1.v20170926.jar-d文件是否显示任何内容?否。无法确定模块描述符。无效的模块名称:“3”不是Java标识符。所以我猜“显式包含模块”的列表是错误的。可能是重复的,谢谢你的链接。如果我理解正确,我必须等待一个新的Eclipse版本,因为我不是org.Eclipse.swt的所有者,不能(不想)修改它。@Stefan True,除非你能(愿意)修改你试图使用的jar。光子里程碑4(4.8.0M4)还没有包括所有插件的自动模块名。例如,对于org.eclipse.ui_3.109.100.v20171116-2149.jar,自动模块名称不起作用,我想在其中使用org.eclipse.ui.forms.widgets.formtoolkit使用org.eclipse.swt作为模块依赖项,乍一看似乎是可行的,因为module-info.java中的错误消失了。然而,我的导入还不起作用。例如,它说“import org.eclipse.swt.swt;”无法访问“org.eclipse.swt.swt类型”jar的访问规则允许访问org/eclipse/swt/*。jar org.eclipse.swt_3.107.1.v20171205-0742.jar在模块路径的插件依赖项下显示为“非模块化-不可修改”。将swt视为
非模块化似乎是根本原因。您能针对PDE提交一个bug(并链接到这里)吗?我还可以想象,一些插件中缺少的
自动模块名
会产生不一致的组合,这一事实会引起一些混乱。顺便说一句:旧的
访问规则
和Java 9的“不可访问”是不相交的概念。我创建了一个min示例并提出了一个bug,请参阅更新的问题。
requires org.eclipse.swt fallback ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar