Eclipse Tycho:使用 java.xml.bind 模块时出现编译错误?



我认为问题与这篇博文中描述的问题相同,但我在Java 10中得到了这个:我有一个Eclipse RCP应用程序,它使用Java 10功能,但也使用JAXB类。在 Eclipse 中,我必须将java.xml.bind模块添加到项目的构建路径配置中(如此处所述(,以使编译错误消失。

但是,在使用 Tycho 1.2.0 构建产品时,我收到以下错误,正是针对使用 JAXB 的类:

[ERROR] Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:1.2.0:compile (default-compile) on project epd-editor: Compilation failure: Compilation failure:
[ERROR] ...appsrcappeditorsXmlPage.java:
[ERROR] package app.editors;
[ERROR] ^
[ERROR] Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.lookup.BinaryModuleBinding.create(BinaryModuleBinding.java:64)
[ERROR] java.lang.NullPointerException
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.BinaryModuleBinding.create(BinaryModuleBinding.java:64)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getModuleFromAnswer(LookupEnvironment.java:427)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForTypeFromModules(LookupEnvironment.java:367)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:228)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:105)

有没有办法配置 Tycho 编译器插件,以便它可以看到像java.xml.bind这样的模块,或者此错误还有其他原因吗?

谢谢。

JavaEE 模块已被弃用以进行删除,默认情况下不会解析,并且将在 Java 11 中删除。 处理此问题的最佳方法是使用第三方依赖项,但是当您观察到JDT在完成此操作时会绊倒自己的脚。我打开了一个问题,并在前段时间修复了它,但是要找到包含更改并在Java 10上运行的工件并不容易。我所知道的第一个神器来自Eclipse Photon I20180531-0700

在 Eclipse 的plugins文件夹中执行以下命令(将来@people:您可能需要更新版本(:

mvn install:install-file 
-Dfile=org.eclipse.jdt.core_3.14.0.v20180528-0519.jar 
-DgroupId=org.eclipse.tycho 
-DartifactId=org.eclipse.jdt.core 
-Dversion=3.14.0.v20180528-0519 
-Dpackaging=jar

然后,您可以按如下方式使用它作为 Maven 编译器插件的依赖项:

<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-compiler-jdt</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<!-- unreleased version that was pulled from Eclipse Photon I20180531-0700
contains the fix and compiles Java 10 -->
<version>3.14.0.v20180528-0519</version>
</dependency>

这个问题也在java9.wtf上通过GitHub上的演示项目进行了描述。(我忘了推,所以现在只上线了大约五分钟。 😒

有三种方法可以包含 java.se.ee 聚合器模块中的模块,JDK 10 中的编译或运行时不包含这些模块。(从 JDK 11 开始,这些模块将从 JDK 中删除(。

  1. 最简单的方法是使用命令行选项 --add-modules java.xml.bind。 这将使用 JDK 中仍包含的版本。
  2. 查找 JAXB 实现 jar。 Maven central是一个很好的地方,还有一个JSR 222(JAXB(的参考实现,它是Java Web Services Developer Pack(http://www.oracle.com/technetwork/java/webservicespack-jsp-140788.html(的一部分,但这已经很老了,可能不是最好的选择。 您可以使用 --upgrade-module-path {path} 将下载 jar 的位置添加到升级模块路径
  3. 2 的替代方法是简单地将包含 JAXB 的 jar 放在类路径上。

我不熟悉第谷,但您需要弄清楚如何在配置中使用这些方法之一。

最新更新