Как использовать плагины 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>

У меня есть это в корне pom:

<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


person Community    schedule 04.01.2010    source источник


Ответы (2)


К сожалению, похоже, что плагин для внедрения интерфейса больше не поддерживается. На самом деле, у меня возникли проблемы с поиском JAR для загрузки.

К счастью, плагины JAXB2 Basics предоставляют аналогичный механизм для добавления интерфейса к сгенерированные заглушки 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>
person Jim Hurne    schedule 13.02.2011

Я действительно не уверен, что это «правильный» способ решить эту проблему, но это то, что я сделал. Сначала загрузите подключаемый модуль вставки интерфейса xjc-if-ins.jar с https://jaxb2-commons.dev.java.net/interface-insertion/xjc-if-ins.jar (не удалось найти банку, содержащую IfInsertPluginImpl.class, в репозитории java.net maven).

Затем установите банку в локальном репозитории:

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.

person Pascal Thivent    schedule 04.01.2010
comment
Похоже, что нет никакого способа сделать это, не добавляя банку в локальный репозиторий, я заполнил задачу для этого, спасибо - person ; 06.01.2010
comment
Я согласен, нам не нужно делать это вручную, и этот jar должен 1. быть доступен в репозитории java.net 2. должен быть добавлен в зависимости плагина. О, не забудьте принять этот ответ :) - person Pascal Thivent; 06.01.2010
comment
Я должен был сказать, кто-нибудь. Я не могу понять, куда поместить эту зависимость, чтобы передать ее от wsimport к jaxb. - person Sionide21; 04.02.2010
comment
@ Sionide21 Sionide21 Вы должны открыть новый вопрос, система комментариев не подходит для ответа на него. - person Pascal Thivent; 04.02.2010