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

Eclipse Tycho: Compile error when using the java.xml.bind module?

我认为问题与此 blog post but I get this for Java 10: I have an Eclipse RCP application that uses Java 10 features but also JAXB classes. In Eclipse, I have to add the java.xml.bind module to the build path configuration of my project (as described ) 中描述的相同,以消除编译错误。

然而,当使用 Tycho 1.2.0 构建产品时,我收到以下错误,正是针对使用 JAXB 的 class:

[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] ...app\src\app\editors\XmlPage.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 这样的模块,或者是否有其他原因导致此错误?

谢谢。

您可以通过三种方式包含来自 java.se.ee 聚合器模块的模块,JDK 10 中不包括编译或运行时。(从 JDK 11 开始,这些模块将从 JDK).

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

我不熟悉 Tycho,但您需要弄清楚如何在其配置中使用其中一种方法。

Java EE modules are deprecated for removal and not resolved by default and will be removed in Java 11。 处理此问题的最佳方法是 , but as you observe JDT trips over its own feet when that is done. I opened an issue 并且它在前一段时间已修复,但要找到包含更改并在 Java 10 上运行的工件并不容易。我知道的第一个工件来自来自 Eclipse Photon I20180531-0700.

在Eclipse的plugins文件夹中执行以下命令(@未来的人:你可能要更新版本了):

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>

同样描述了问题on java9.wtf with a demo project on GitHub。 (忘记推送了,所以现在才上线五分钟左右。)