Как обновить версию JAXB RI, используемую в JDK? - PullRequest
0 голосов
/ 25 апреля 2018

Когда я компилирую свой XSD с JDK 8, я получаю ожидаемый вывод.

Когда я компилирую свой XSD с JDK 7, кажется, что он не читает мой файл binding.xjb.

IЯ уверен, что это связано с одним из многих дефектов, исправленных между jaxb-v2

  • JDK7 первого выпуска JAXB RI 2.2.4-1

  • Первый выпуск JDK8 JAXB RI 2.2.8

Примечания к выпуску: JAXB

Может кто-нибудь помочь мне разобраться, как, если возможно, обновитьверсия JAXB RI, используемая JDK?

Я строю с Maven и использую зависимости ...

  <dependency>
    <groupId>org.jvnet.jaxb2_commons</groupId>
    <artifactId>jaxb2-basics-runtime</artifactId>
    <version>0.6.4</version>
  </dependency>

Используемый мной плагин ...

  <plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.13.3</version>
    <executions>
      <execution>
        <goals>
          <goal>generate</goal>
        </goals>
        <configuration>
          <catalog>target/classes/catalog.cat</catalog>
          <strict>false</strict>
          <extension>true</extension>
          <schemaIncludes>
            <include>*.xsd</include>
          </schemaIncludes>
          <bindingIncludes>
            <include>*.xjb</include>
          </bindingIncludes>
          <generatePackage>com.pcmsgroup.v21.esi.deviceservice.bean</generatePackage>
          <args>
            <arg>-XtoString</arg>
            <arg>-Xequals</arg>
            <arg>-XhashCode</arg>
            <arg>-Xinheritance</arg>
            <arg>-Xcopyable</arg>
            <arg>-XenumValue</arg>
            <arg>-Xannotate</arg>
          </args>
          <plugins>
            <plugin>
              <groupId>org.jvnet.jaxb2_commons</groupId>
              <artifactId>jaxb2-basics</artifactId>
              <version>0.9.5</version>
            </plugin>
            <plugin>
              <groupId>org.jvnet.jaxb2_commons</groupId>
              <artifactId>jaxb2-basics-annotate</artifactId>
              <version>0.6.5</version>
            </plugin>
          </plugins>
        </configuration>
      </execution>
    </executions>
    <configuration>
      <catalog>target/classes/catalog.cat</catalog>
      <strict>false</strict>
      <extension>true</extension>
      <schemaIncludes>
        <include>*.xsd</include>
      </schemaIncludes>
      <bindingIncludes>
        <include>*.xjb</include>
      </bindingIncludes>
      <generatePackage>com.jeff.bean</generatePackage>
      <args>
        <arg>-XtoString</arg>
        <arg>-Xequals</arg>
        <arg>-XhashCode</arg>
        <arg>-Xinheritance</arg>
        <arg>-Xcopyable</arg>
        <arg>-XenumValue</arg>
        <arg>-Xannotate</arg>
      </args>
      <plugins>
        <plugin>
          <groupId>org.jvnet.jaxb2_commons</groupId>
          <artifactId>jaxb2-basics</artifactId>
          <version>0.9.5</version>
        </plugin>
        <plugin>
          <groupId>org.jvnet.jaxb2_commons</groupId>
          <artifactId>jaxb2-basics-annotate</artifactId>
          <version>0.6.5</version>
        </plugin>
      </plugins>
    </configuration>
  </plugin>

Я мог бы подойти к этому неправильно, и, возможно, мне нужно взглянуть на org.jvnet.jaxb2.maven2:maven-jaxb2-plugin


Это показывает разницу между прогонами JDK и JDK 8.Слева, он, кажется, игнорирует файл binding.xjc и поэтому не знает размер перечислений.JDK 7 vs JDK 8

Мы также видим, что сгенерированный класс Java имеет разные типы.Generated java file

Кроме того, он генерирует классы адаптеров в JDK 8, но не в JDK 7. Generated files

1 Ответ

0 голосов
/ 25 апреля 2018

Несколько предложений:

  1. args определены в двух местах. Один под /plugin/executions/execution/configuration/args и один под /plugin/configuration/args. Вы можете иметь это только в /plugin/configuration/args.
  2. В / plugin / configuration есть два атрибута schemaDirectory и bindingDirectory . Не видите, что при использовании плагина выше xsds и xjbs лежат в самой директории ресурсов?
  3. Можете ли вы попробовать настроить эти параметры тоже: forceRegenerate = true и cleanPackageDirectories = false.

Просто упомянув пример определения плагина для справки, вы можете обрезать детали, которые вам не нужны.

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.8.3</version>
    <configuration>
        <generatePackage>com.some.sample.package</generatePackage>
        <schemaDirectory>src/main/resources/xsd</schemaDirectory>
        <bindingDirectory>src/main/resources/xjb</bindingDirectory>
        <generateDirectory>${project.build.directory}/generated-sources</generateDirectory>
        <extension>true</extension>
        <args>
            <arg>-no-header</arg>
            <arg>-Xxew</arg>
            <arg>-Xxew:instantiate lazy</arg>
            <arg>-Xxew:delete</arg>
            <arg>-XtoString</arg>
            <arg>-Xequals</arg>
            <arg>-XhashCode</arg>
            <arg>-Xvalue-constructor</arg>
            <arg>-Xfluent-api</arg>
            <arg>-Xannotate</arg>
        </args>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-basics</artifactId>
                <version>${jaxb2.basics.version}</version>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-fluent-api</artifactId>
                <version>${jaxb2.fluentapi.version}</version>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-value-constructor</artifactId>
                <version>${jaxb2.value.constructor.version}</version>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-basics-annotate</artifactId>
                <version>${jaxb2.basics.annotate.version}</version>
            </plugin>
        </plugins>
    </configuration>
    <executions>
        <execution>
            <id>abc.xsd</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <schemaIncludes>
                    <include>abc.xsd</include>
                </schemaIncludes>
                <bindingIncludes>
                    <include>abc.binding.xml</include>
                </bindingIncludes>
                <generatePackage>com.some.sample.package.transfer</generatePackage>
                <removeOldOutput>false</removeOldOutput>
                <forceRegenerate>true</forceRegenerate>
                <cleanPackageDirectories>false</cleanPackageDirectories>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.github.jaxb-xew-plugin</groupId>
            <artifactId>jaxb-xew-plugin</artifactId>
            <version>${jaxb.xew.plugin.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-xjc</artifactId>
            <version>${jaxb.xjc.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-osgi</artifactId>
            <version>${jaxb.xjc.version}</version>
        </dependency>
    </dependencies>
</plugin>


<jaxb2.basics.version>0.9.2</jaxb2.basics.version>
<jaxb.xew.plugin.version>1.1</jaxb.xew.plugin.version>
<jaxb.xjc.version>2.2.6</jaxb.xjc.version>
<jaxb2.fluentapi.version>3.0</jaxb2.fluentapi.version>
<jaxb2.value.constructor.version>3.0</jaxb2.value.constructor.version>
<javax.xml.bind.version>2.2.6</javax.xml.bind.version>
<jaxb2.basics.annotate.version>1.0.4</jaxb2.basics.annotate.version>
...