Как запустить XJC в Java 9+

Я загрузил JAXB 2.3.0.1 и JavaBeans Activation Framework (JAF) 1.2.0 (на основе ответа на этот вопрос). Я извлек все файлы JAR в тот же каталог, а затем запустил в этом каталоге следующую команду:

java -cp jaxb-api.jar;jaxb-core.jar;jaxb-impl.jar;javax.activation-1.2.0.jar
    -jar jaxb-xjc.jar [xjc-arguments]

Приведенная выше команда завершается ошибкой со следующим сообщением:

java.lang.NoClassDefFoundError: javax / activation / DataSource
...
Вызвано: java.lang.ClassNotFoundException: javax.activation.DataSource

Я убедился, что класс существует в файле javax.activation-1.2.0.jar. Я также пробовал использовать новые (для Java 9+) аргументы -p . --add-modules java.activation, но это не помогло со следующим сообщением об ошибке:

Ошибка при инициализации загрузочного уровня
java.lang.modules.ResolutionException: модули jaxb.core и jaxb.impl экспортируют пакет com.sun.xml.bind.marshaller в модуль java.activation

Если я попробую комбинацию -cp и --add-modules, я получу другую ошибку инициализации загрузочного уровня. Кто-нибудь знает, как заставить XJC работать на платформе Java 9+?

Мой конкретный вариант использования - OpenJDK 11 в Windows.


person Jeff G    schedule 03.10.2018    source источник
comment
Попробуйте загрузить версию они ' Я попросил людей перейти на - a:javax.activation g:com.sun.activation и убедиться, что указаны правильные имена jar-файлов. Поскольку класс DataSource в журналах выглядит как прямо здесь в артефакте.   -  person Naman    schedule 03.10.2018
comment
Вы не можете указать одновременно -cp и -jar, я предполагаю, что вы хотите поместить jaxb-xjc.jar в путь к классу и вместо этого указать его основной класс.   -  person Alan Bateman    schedule 03.10.2018
comment
@nullpointer Я скачал версию, которую вы связали, но она в двоичном виде идентична версии, которую я уже использовал (проверено с помощью криптографического хеша).   -  person Jeff G    schedule 03.10.2018
comment
Выполните обновление до jaxb-api версии 2.3.1, тогда вам больше не нужно явно включать JAF.   -  person Jesper    schedule 05.10.2018


Ответы (1)


Основная проблема заключалась в том, что исполняемый файл java не поддерживает одновременное указание аргументов командной строки -cp и -jar. Спасибо Алану Бейтману за эту информацию!

Следовательно, правильный способ заставить это работать - использовать следующую команду:

java -cp javax.activation-1.2.0.jar;jaxb-xjc.jar com.sun.tools.xjc.XJCFacade
    [xjc-arguments]

Чтобы упростить запуск XJC, откройте bin / xjc.bat (извлеченный из jaxb-ri-2.3.0.zip) и отредактируйте командную строку, чтобы она соответствовала приведенному выше вызову.

person Jeff G    schedule 03.10.2018