如文章“ 要从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

使用OpenJDK 11运行JAXB xjc编译器相关推荐

  1. openjdk 编译_使用OpenJDK 11运行JAXB xjc编译器

    openjdk 编译 如文章" 要从Java 11中删除的API "所述,JDK 11不再包括 JAXB实现. 在本文中,我将结合使用JAXB ( 用于XML绑定的Java体系结构 ...

  2. recorder_将Java Flight Recorder与OpenJDK 11一起使用

    recorder Java Flight Recorder(JFR)曾经是Oracle JDK的商业附加组件. 由于它最近与Java Mission Control一起开源,因此使用OpenJDK 1 ...

  3. 将Java Flight Recorder与OpenJDK 11结合使用

    Java Flight Recorder(JFR)曾经是Oracle JDK的商业附加组件. 由于它是与Java Mission Control一起最近开源的,因此使用OpenJDK 11的每个人现在 ...

  4. java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...

    我正在尝试将我的调试器连接到在Open JDK 11上运行的Wildlfy. 尽管Wildfly说: Listening for transport dt_socket at address: 878 ...

  5. java控制台检测不到远程端口,java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...

    我正在尝试将我的调试器连接到在Open JDK 11上运行的Wildlfy. 尽管Wildfly说: Listening for transport dt_socket at address: 878 ...

  6. 在Ubuntu 18.04上实际安装OpenJDK 11

    OpenJDK 11于 1018年9月25日发布 .由于这是版本8之后的第一个LTS版本,因此期待已久. 在Ubuntu 18.04(Bionic Beaver)上安装了该软件包后,该软件包附带了一个 ...

  7. 红帽取代 Oracle,接管 OpenJDK 8 和 OpenJDK 11 | 极客头条

    作者 | Darryl K. Taft 译者 | 弯月 责编 | 沭七 出品 | CSDN(ID:CSDNnews) 红帽已经取代 Oracle,接管了 OpenJDK 8 和 OpenJDK 11 ...

  8. 关于 Windows Subsystem for Android 以及 Windows 11 运行 Android 应用的更多细节

    更新:Beta 分支已经支持在 Windows 11 上使用 Android 应用了,具体的使用和安装方法参考这篇文章 Windows 11 Beta 预览版用户已经可以体验 Android 应用 即 ...

  9. 【教程】Windows 11 运行安卓子系统 安装教程

    [教程]Windows 11 运行安卓子系统 安装教程 Android子系统的要求 确保Windows 11版本为22000.xxx或更高版本. 硬件必须支持并启用BIOS/UEFI虚拟化 确保微软商 ...

最新文章

  1. VMware 12.0 在安装的时候出现 microsoft runtime dll
  2. Java Timer定时器 使用
  3. python中break可以用在for和if中吗_Python的for和break循环结构中使用else语句的技巧...
  4. 发送结构化的网络消息
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1054:三角形判断
  6. AD20学习笔记5---PCB设计规则设置及PCB手工布线
  7. ubuntu安装java8
  8. LAMP详解及源码编译安装过程
  9. 载入内存,让程序运行起来
  10. 麒麟系统安装打印机共享_国产操作系统麒麟——文档打印 解决方案
  11. ssl免费证书的申请
  12. android 转盘菜单,Android实现可点击的幸运大转盘
  13. mysql my.cof 配置表空间_my.conf配置大全
  14. 名编辑电子杂志大师教程 | 设置电子杂志书签功能
  15. 清除Chrome浏览器下默认浅黄色背景(保存密码时出现)
  16. Matlab新老版本的差别问题——CAGD课程设计
  17. 一次基于u2-net的人物肖像画的实践
  18. Word文档怎么删除html标签,word怎么删除一整页的两种方法
  19. access2007 mysql_access2007使用方法,access2007使用教程
  20. 如何选择合适的渗压计?

热门文章

  1. 【DP】Mobile Service(jzoj 1327)
  2. 【贪心】Stall Reservations(luogu 2859/poj 3190)
  3. 【结论】游戏(jzoj 1984)
  4. CF449B Jzzhu and Cities(Dijkstra)
  5. P2153 晨跑,费用流裸题
  6. 1、jquery事件绑定和委托的实现
  7. Hadoop的FileSystem.copyToLocalFile两个参数 空指针异常
  8. Java中的事务——全局事务与本地事务
  9. ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
  10. python注释的用法(单and多行)