Java 如何更新JDK中使用的JAXB RI版本?
当我用JDK 8编译XSD时,我得到了预期的输出 当我用JDK 7编译XSD时,它似乎没有读取binding.xjb文件 我很确定这是jaxb-v2之间修复的众多缺陷之一Java 如何更新JDK中使用的JAXB RI版本?,java,java-8,jaxb,java-7,jaxb2,Java,Java 8,Jaxb,Java 7,Jaxb2,当我用JDK 8编译XSD时,我得到了预期的输出 当我用JDK 7编译XSD时,它似乎没有读取binding.xjb文件 我很确定这是jaxb-v2之间修复的众多缺陷之一 JDK7第一版JAXB RI 2.2.4-1 JDK8第一版JAXB RI 2.2.8 发行说明: 如果可能的话,有人能帮我解决如何更新JDK使用的JAXB RI版本吗 我正在使用Maven进行构建,并且正在使用 <dependency> <groupId>org.jvnet.jaxb2
- JDK7第一版JAXB RI 2.2.4-1
- JDK8第一版JAXB RI 2.2.8
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-runtime</artifactId>
<version>0.6.4</version>
</dependency>
org.jvnet.jaxb2_commons
我们还可以看到生成的java类有不同的类型。
此外,它在JDK 8中生成适配器类,但在JDK 7中不生成。
几点建议:
参数在两个位置定义。一个在/plugin/executions/execution/configuration/args
下,另一个在/plugin/configuration/args
下。您可以在/plugin/configuration/args
中使用它
在/plugin/configuration下,有两个属性schemaDirectory和bindingDirectory。在上面的插件使用中,我们看不到XSD和xjbs都位于resources目录中吗
您是否也可以尝试设置这些参数:
强制重新生成=true和CleanPackageDirectory=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>
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.8.3
com.some.sample.package
src/main/resources/xsd
src/main/resources/xjb
${project.build.directory}/生成的源
真的
-无标题
-Xxew
-Xxew:实例化lazy
-Xxew:删除
-XtoString
-Xequals
-XhashCode
-Xvalue构造函数
-Xfluent api
-山奈特
org.jvnet.jaxb2_commons
jaxb2基础知识
${jaxb2.basics.version}
org.jvnet.jaxb2_commons
jaxb2 fluent api
${jaxb2.fluentapi.version}
org.jvnet.jaxb2_commons
jaxb2值构造函数
${jaxb2.value.constructor.version}
org.jvnet.jaxb2_commons
jaxb2基础注释
${jaxb2.basics.annotate.version}
abc.xsd
生成
abc.xsd
abc.binding.xml
com.some.sample.package.transfer
假的
真的
假的
com.github.jaxb-xew-plugin
jaxbxew插件
${jaxb.xew.plugin.version}
com.sun.xml.bind
jaxbxjc
${jaxb.xjc.version}
com.sun.xml.bind
jaxb osgi
${jaxb.xjc.version}
0.9.2
1.1
2.2.6
3
3
2.2.6
1.0.4
谢谢,但这些都无助于JAXB在JDK 7下找不到绑定文件。您能否分享最小的项目结构、maven日志和pom部分以进一步了解。0.8.3
是非常旧的版本。0.6.4
是JAXB2基础的非常旧的版本。只是说说而已。请在这里提交一个带有示例项目的PR:在j/jdk7下。JAXB版本之间存在差异,但通常使用与之捆绑的特定版本。由于JDK版本的差异是。。。令人惊讶的是,我愿意看一看。免责声明:我是maven-jaxb2-plugin
和jaxb2基础的作者。顺便问一下,你确定这与jdk9无关吗?我在JDK 9上没有处理绑定时遇到问题。这在的0.14.0
版本中是固定的。
<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>