使用OpenJDK 11运行JAXB xjc编译器

如文章“ 要从Java 11中删除的API ”所述,JDK 11不再包含 JAXB实现。 在本文中,我将结合使用JAXB ( 用于XML绑定的Java体系结构 ) 参考实现提供的xjc编译器和OpenJDK 11,将XML模式文件编译为Java类。

在Java SE 6之前,想要与Java SE应用程序一起使用JAXB的开发人员需要单独获取JAXB实现,因为Java发行版未提供该实现。 从Java SE 6开始,Java包含一个JAXB实现。 在许多情况下这很方便,但是当开发人员希望使用比JDK所提供的版本更高或不同的JAXB 实现时,事情会变得有些困难 。 当OpenJDK 9引入了模块化时, JAXB实现被移到了java.xml.bind模块中 ,并标记为不推荐 删除 。 JAXB实现 与JDK 11一起全部删除 。 这篇文章探讨了在OpenJDK 11中使用JAXB的xjc编译器 。

由于JDK 11不再包含JAXB的实现,因此必须单独购买一个。 在本文中,我将使用2.3.0版的JAXB参考实现 。 本文中使用的JDK版本是JDK 11.0.2 General-Availability Release 。

在不带参数的情况下运行xjc脚本会导致将帮助/用法呈现到标准输出中。

Usage: xjc [-options ...] <schema file/URL/dir/jar> ... [-b <bindinfo>] ...
If dir is specified, all schema files in it will be compiled.
If jar is specified, /META-INF/sun-jaxb.episode binding file will be compiled.
Options:-nv                :  do not perform strict validation of the input schema(s)-extension         :  allow vendor extensions - do not strictly follow theCompatibility Rules and App E.2 from the JAXB Spec-b <file/dir>      :  specify external bindings files (each <file> must have its own -b)If a directory is given, **/*.xjb is searched-d <dir>           :  generated files will go into this directory-p <pkg>           :  specifies the target package-m <name>          :  generate module-info.java with given Java module name-httpproxy <proxy> :  set HTTP/HTTPS proxy. Format is [user[:password]@]proxyHost:proxyPort-httpproxyfile <f> :  Works like -httpproxy but takes the argument in a file to protect password -classpath <arg>   :  specify where to find user class files-catalog <file>    :  specify catalog files to resolve external entity referencessupport TR9401, XCatalog, and OASIS XML Catalog format.-readOnly          :  generated files will be in read-only mode-npa               :  suppress generation of package level annotations (**/package-info.java)-no-header         :  suppress generation of a file header with timestamp-target (2.0|2.1)  :  behave like XJC 2.0 or 2.1 and generate code that doesnt use any 2.2 features.-encoding <encoding> :  specify character encoding for generated source files-enableIntrospection :  enable correct generation of Boolean getters/setters to enable Bean Introspection apis -disableXmlSecurity  :  disables XML security features when parsing XML documents -contentForWildcard  :  generates content property for types with multiple xs:any derived elements -xmlschema         :  treat input as W3C XML Schema (default)-dtd               :  treat input as XML DTD (experimental,unsupported)-wsdl              :  treat input as WSDL and compile schemas inside it (experimental,unsupported)-verbose           :  be extra verbose-quiet             :  suppress compiler output-help              :  display this help message-version           :  display version information-fullversion       :  display full version informationExtensions:-Xinject-code      :  inject specified Java code fragments into the generated code-Xlocator          :  enable source location support for generated code-Xsync-methods     :  generate accessor methods with the 'synchronized' keyword-mark-generated    :  mark the generated code as @javax.annotation.Generated-episode <FILE>    :  generate the episode file for separate compilation-Xpropertyaccessors :  Use XmlAccessType PROPERTY instead of FIELD for generated classes

xjc编译器脚本(bash文件和DOS批处理文件)很方便调用jaxb-xjc.jar 。 脚本将其作为可执行JAR ( java -jar )调用,如以下摘录所示:

  • Windows版本( xjc.bat ):
    %JAVA% %XJC_OPTS% -jar "%JAXB_HOME%\lib\jaxb-xjc.jar" %*
  • Linux版本( xjc.sh ):
    exec "$JAVA" $XJC_OPTS -jar "$JAXB_HOME/lib/jaxb-xjc.jar" "$@"

如上面的脚本摘录所示,Java启动器的调用中包含一个环境变量XJC_OPTS 。 不幸的是,不能简单地通过-classpath将JAXB参考实现JAR添加到类路径中,因为使用java -jar 运行可执行的JAR仅遵循通过MANIFEST.MFClass-Path (该条目存在于jaxb-ri-2.3.0.jar作为“ Class-Path: jaxb-core.jar jaxb-impl.jar ”)。

一种解决方法是修改脚本以将JAR用作常规JAR(不带-jar )并显式执行类XJCFacade ,以便可以将类路径显式提供给Java启动器 。 Windows xjc.bat脚本xjc.bat进行了演示:

%JAVA% -cp C:\lib\javax.activation-api-1.2.0.jar;C:\jaxb-ri-2.3.0\lib\jaxb-xjc.jar com.sun.tools.xjc.XJCFacade %*

除了JAXB参考实现JAR javax.activation-api-1.2.0.jar ,我还需要在类路径中包括javax.activation-api-1.2.0.jar JAR,因为JavaBeans应用程序框架 ( JAF )是JDK也不再提供的依赖项(通过删除JAXB的同一JEP 320删除)。

当然,也可能根本不使用XJC脚本,而是直接运行Java启动器。 该脚本确保设置了环境变量JAXB_HOME 。 该环境变量应指向JAXB参考实现扩展到的目录。

通过这些更改,可以使用JDK 11在命令行上针对XSD执行JAXB xjc编译器。

翻译自: https://www.javacodegeeks.com/2019/01/running-jaxb-xjc-compiler-with-openjdk-11.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java手动回收_浅谈java是如何做资源回收补救的

学习java的过程&#xff0c;我们经常谈论一个对象的回收&#xff0c;尤其是资源类型&#xff0c;如果没有显示的关闭&#xff0c;对象就被回收了&#xff0c;说明出现了资源泄漏。java本身为了防止这种情况&#xff0c;做了一些担保的方式&#xff0c;确保可以让未关闭的资源合…

国家开放大学2021春1108钢结构(本)题目

教育 教育 试卷代号&#xff1a;1108 2021年春季学期期末统一考试 钢结构&#xff08;本&#xff09; 试题 2021年7月 一、单项选择题&#xff08;将每题正确答案的序号填入括号内&#xff0c;每小题2分&#xff0c;共计36分&#xff09; 1.下面关于钢结构特点说法有误的一项…

[渝粤教育] 西南科技大学 投资经济学 在线考试复习资料(2)

投资经济学——在线考试复习资料 一、单选题 1.投资决策是经济决策的重要组成部分,是选择和决定( )的过程 A.投资资金 B.投资行动方案 C.投资机会 D.投资目的 2.下面属于第三产业的行业是( ) A.制造业 B.建筑业 C.农业 D.商业 3.重视资金的( )是正确确定项目成本和收益的不可…

光纤收发器模块如何选购,光纤收发器模块选购原则

光纤收发器的光模块模块选购一直是许多人心中的难题&#xff0c;为了使大家能挑到好的产品&#xff0c;今日飞畅科技的小编就来为大家好好说说光纤收发器的光模块如何选购&#xff0c;感兴趣的朋友就跟随小编一起来看看吧&#xff01; 一、光纤收发器光模块如何选购&#xff1…

[渝粤教育] 西南科技大学 国际贸易理论与实务 在线考试复习资料2021版(2)

国际贸易理论与实务——在线考试复习资料2021版 一、单选题 1.根据货币数量理论,国内货币供给增加50%将导致( ) A.国内价格水平提高50% B.国内价格水平提高幅度大于50% C.国内价格水平降低50% D.国内价格水平降低幅度大于50% 答案:看左边查询 2.浮动汇率制的特点之一是( …

光纤收发器哪个发射,那个接收?

当我们远距离传输时&#xff0c;通常会使用光纤来传输。因为光纤的传输距离很远&#xff0c;一般来说单模光纤的传输距离在10千米以上&#xff0c;而多模光纤的传输距离最高也能达到2千米。而在光纤网络中&#xff0c;我们常常会使用到光纤收发器。那么&#xff0c;在使用光纤收…

【渝粤教育】电大中专跨境电子商务理论与实务 (26)作业 题库

1.在按照交易主体类型中&#xff0c;&#xff08; &#xff09;面对的最终客户为企业或集团客户&#xff0c;提供企业、产品、服务等相关信息。 A.O2O跨境电商或平台 B.B2B跨境电商或平台 C.B2C跨境电商或平台 D.C2C跨境电商或平台 错误 正确答案&#xff1a;左边查询 学生答案…

Sparklens:Spark应用程序优化工具

Sparklens是带有内置Spark Scheduler模拟器的Spark概要分析工具&#xff1a;它使您更容易理解Spark应用程序的可伸缩性限制。 它有助于了解给定Spark应用程序使用提供给它的计算资源的效率。 它已在Qubole实施并维护。 它是开源的&#xff08; Apache License 2.0 &#xff09;…

python打包exe原理_pyinstaller打包python文件成exe(原理.安装.问题)

py文件打包成exe文件的方式一共有三种&#xff1a;py2exe、PyInstaller和cx_Freeze本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件1.PyInstaller 简介2.PyInstaller 安装3.将py文件打包成exe文件4.PyInstaller打包常见问题一. PyInstaller简介1.python相关文件介…

[渝粤教育] 中国地质大学 管理学原理 复习题

《管理学原理》模拟题 一单项选择题 1.管理学既是科学又是(). A.政治 B.实践 C.艺术 D.历史 2.()控制的目的包括防止错误地分配资源. A.规则控制 B.人员控制 C.财务控制 D.结构控制 3.()是组织为达到目标而制定的一种限定活动范围的计划. A.程序 B.方法 C.规划 D.政策 4.()在…

光纤收发器相比其他数据交换器有哪些优势?

在光纤收发器出现以前&#xff0c;网络传输主要是通过光口交换机&#xff0c;但是随着网络通信技术的迅猛发展&#xff0c;人们对网络的使用越来越广泛&#xff0c;网络在地域的覆盖上也越来越大&#xff0c;所以网络的传输速度、传输质量、以及网络传输过程中的保密性等等&…

[渝粤教育] 中国地质大学 自动控制原理 复习题 (2)

《自动控制原理》模拟题 一.单选题 1.当输入为单位斜坡且系统为单位反馈时对于II型系统其稳态误差为() A.0 B.0.1/k C.1/k D.无穷大 2.I型系统开环对数幅频特性的低频段斜率为() A.-40(dB/dec) B.-20(dB/dec) C.0(dB/dec) D.20(dB/dec) 3.当输入为单位斜坡且系统为单位反馈时…

从StreamCorruptedException解析值:无效的流头消息

看到StreamCorruptedException抛出“原因”并指出“ 无效流头 ”&#xff0c;然后提供该无效流头的第一部分是相对常见的情况。 通常&#xff0c;确定异常原因的有用线索是了解无效流头是什么&#xff0c;因为这可以解释意外的原因并引起问题。 StreamCorruptedException只有两…

java 所有子类_java 查找类的所有子类

package _02;import java.io.File;import java.net.URL;public class MainTest_FindAllSubClass {public static void main(String[] args) {Class> clazz MainTest_FindAllSubClass.class;// 定位到当前的包路径// URL url Toy.class.getResource("");// 定位到…

[渝粤教育] 中国地质大学 计算机图形学(新) 复习题

《计算机图形学》模拟题 一单选题 1.枚举出图形中所有点的表示方法是() A.图形 B.图像 C.参数法 D.点阵法 2.下面哪个设备不是计算机图形学的输入设备 A.光笔 B.键盘 C.扫描仪 D.显示器 3.下面哪个设备不是计算机图形学的输出设备 A.激光打印机 B.显示器 C.数据手套 D.喷墨打…

光纤收发器有什么用?光纤收发器的作用是什么?

光纤收发器是光通信系统所必须的一款产品设备&#xff0c;它的主要作用是将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元。那么&#xff0c;光纤收发器有什么用&#xff1f;光纤收发器的作用是什么呢&#xff1f;接下来我们就跟随飞畅科技的小编来一…

[渝粤教育] 中国地质大学 面向对象程序设计 复习题 (2)

《面向对象程序设计》模拟题 一.单选题 1.如果一个类中包含纯虚函数则该类称为(). A.抽象类 B.虚基类 C.派生类 D.子类 2.在类中将show声明为不带返回值的纯虚函数则正确的写法是(). A.virtual void show()0; B.virtual show()0; C.virtual void show(); D.void show()0 virtu…

java如何调用static类_Java中的static的使用指南

一、Java中的static使用之静态变量1.Java 中被static修饰的成员称为静态成员或类成员。它属于整个类所有&#xff0c;而不是某个对象所有&#xff0c;即被类的所有对象所共享、且优先于对象存在。静态成员可以使用类名直接访问&#xff0c;也可以使用对象名进行访问。使用 stat…

如何利用光衰减器测试光纤收发器的灵敏度?

光纤收发器的灵敏度可以说是光纤收发器的一个重要指标&#xff0c;了解如何测试光纤接收器的灵敏度是一项很重要的技能。当光输入功率在一定范围内时&#xff0c;光纤接收器的性能最佳。但是如何来判断光纤收发器是否会在最低光输入功率时&#xff0c;提供最佳性能呢&#xff1…

[渝粤教育] 西南科技大学 数控机床与编程 在线考试复习资料

数控机床与编程——在线考试复习资料 一、单选题 1.非模态代码指令是指( )。 A.一经在一个程序段中指定,直到出现同组的另一个代码时才失效 B.只在写有该代码的程序段中有效 C.不能独立使用的代码 D.有续效作用的代码 2.S1000表示( )。 A.主轴转速 1000mm/min B.主轴转速1000r…