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

时间:2018-06-12 13:49:17

标签: eclipse maven eclipse-rcp tycho java-10

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

但是,在使用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] ...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这样的模块,或者是否有其他原因导致此错误?

感谢。

2 个答案:

答案 0 :(得分:1)

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

  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}
  3. 添加将jar下载到升级模块路径的位置
  4. 2的替代方法是简单地将包含JAXB的jar放在类路径上。
  5. 我不熟悉Tycho,但您需要弄清楚如何使用其中一种方法进行配置。

答案 1 :(得分:1)

Java EE modules are deprecated for removal and not resolved by defaultwill be removed in Java 11。 解决这个问题的最好方法是use a third-party dependency,但是当你完成这一过程时,你会发现JDT在自己的脚上行程。我打开an issue并且它已经修复了一段时间,但是找到包含更改的工件并且在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>

问题也在on java9.wtf a demo project on GitHub进行了描述。 (我忘了推,所以它现在仅在线约五分钟。)