Eclipse Tycho: ошибка компиляции при использовании модуля java.xml.bind? - PullRequest
0 голосов
/ 12 июня 2018

Я думаю, что проблема такая же, как описано в этом сообщении в блоге , но я получаю это для 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] ...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 голосов
/ 15 июня 2018

Модули Java EE устарели для удаления и по умолчанию не разрешены. и будут удалены в 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 .(Я забыл нажать, так что сейчас он работает только пять минут. ?)

0 голосов
/ 14 июня 2018

Существует три способа включения модулей из модуля агрегатора java.se.ee, который не включен для компиляции или выполнения в JDK 10. (Начиная с JDK 11 эти модули будут удалены из JDK).

  1. Самое простое - использовать параметр командной строки --add-modules java.xml.bind.Это будет использовать версию, которая все еще включена в JDK.
  2. Найдите jar реализации JAXB.Maven central - хорошее место для этого, есть также эталонная реализация для JSR 222 (JAXB), которая является частью пакета разработчика веб-сервисов Java (http://www.oracle.com/technetwork/java/webservicespack-jsp-140788.html), но она устарела и может не быть устаревшей).лучший выбор. Вы можете добавить туда, где вы скачали jar, к пути модуля обновления, используя --upgrade-module-path {path}
  3. Альтернативой 2 является просто поместить jar, содержащий JAXB, вclasspath.

Я не знаком с Tycho, но вам необходимо выяснить, как использовать один из этих методов в его конфигурации.

...