Как использовать плагины jaxb_commons от maven
Я пытаюсь использовать плагин jaxb для вставки интерфейса в элемент выбора, генерирующий классы из maven. Проблема в том, что я не могу понять, как это сделать из maven, хранилище не ясно из документации и единственный пример (ниже) не работает, похоже, игнорирует плагин (maven сообщает, что нет ошибка о том, что он не найден) или у плагина нет всех надстроек, перечисленных в документации проекта:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.6.1</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<generatePackage>br.com.wonder.nfe.xml</generatePackage>
<args>
<arg>-Xifins</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>basic</artifactId>
<version>0.4.1.5</version>
</plugin>
</plugins>
</configuration>
</plugin>
У меня есть это в корне пом:
<pluginRepositories>
<pluginRepository>
<id>maven2-repository.dev.java.net</id>
<url>http://download.java.net/maven/2</url>
</pluginRepository>
<pluginRepository>
<id>maven-repository.dev.java.net</id>
<name>Java.net Maven 1 Repository (legacy)</name>
<url>http://download.java.net/maven/1</url>
<layout>legacy</layout>
</pluginRepository>
</pluginRepositories>
Бег, который дает:
Ошибка при настройке параметров CmdLine "[-Xifins, -episode, /home/administrador/JavaApp/wnfe3/wnfe-ejb/target/generated-sources/xjc/META-INF/sun-jaxb.episode]"!
Встроенная ошибка: нераспознанный параметр -Xifins
2 ответа
К сожалению, похоже, что плагин для ввода интерфейса больше не поддерживается. На самом деле, у меня проблемы с поиском JAR для загрузки.
К счастью, базовые плагины JAXB2 предоставляют аналогичный механизм для добавления интерфейса к сгенерированным заглушкам JAXB (см. Плагин Inheritance).
Плагин JAXB2 Basics доступен в репозитории java.net Maven.
Используя плагин Inheritance, ваш POM будет выглядеть так:
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.6.2</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<args>
<arg>-Xinheritance</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.5.3</version>
</plugin>
</plugins>
</configuration>
</plugin>
...
</plugins>
...
</build>
Документация плагина Inheritance содержит пример того, как будут выглядеть ваши привязки JAXB. Для вашего удобства я воспроизвел приведенный ниже пример:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
jaxb:version="2.1"
jaxb:extensionBindingPrefixes="inheritance">
<!-- ... -->
<xs:complexType name="WillBeMadeCloneableType">
<xs:annotation>
<xs:appinfo>
<inheritance:implements>java.lang.Cloneable</inheritance:implements>
</xs:appinfo>
</xs:annotation>
<!-- ... -->
</xs:complexType>
<!-- ... -->
</xs:schema>
Я действительно не уверен, что это "правильный" способ решить эту проблему, но именно это я и сделал. Сначала загрузите плагин для вставки интерфейса xjc-if-ins.jar
из https://jaxb2-commons.dev.java.net/interface-insertion/xjc-if-ins.jar (не удалось найти банку, содержащую IfInsertPluginImpl.class
в репозитории java.net maven).
Затем установите jar в локальный репозиторий:
mvn install:install-file -DgroupId=org.jvnet.jaxb2_commons \
-DartifactId=xjc-if-ins \
-Dversion=1.0-SNAPSHOT \
-Dpackaging=jar \
-Dfile=xjc-if-ins.jar
Наконец, добавьте банку в качестве зависимости от maven-jaxb2-plugin
в разделе плагинов:
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.6.2</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<args>
<arg>-Xifins</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>basic</artifactId>
<version>0.4.1.5</version>
</plugin>
</plugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>xjc-if-ins</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
...
</build>
Как я уже сказал, это, возможно, не самый чистый способ настроить плагин jaxb2 для использования плагина вставки интерфейса, но с этой настройкой generate
цель не жалуется на -Xifins
расширение.