Apache XMLBeans 5.4.1 scomp 编译与进阶实战详解
本文以 Apache XMLBeans 5.4.1 为对象,在 Ubuntu 22.04 实测环境下详解 scomp 编译器(SchemaCompiler 主类)的调用方式、产物结构、失败样例、CLI 校验器与 JDK 8/17 兼容性,全部命令与回显真实可复现。
Apache XMLBeans 5.4.1 scomp 编译与进阶实战详解
目标:在 Ubuntu 22.04 + OpenJDK 17/8 双 JDK 环境下,实测 Apache XMLBeans 5.4.1 的 scomp 编译器全流程(调用方式、选项、产物、失败样例)、CLI 实例校验器与 Saxon 查询引擎分层,全部代码与回显真实可复现。
一、环境信息
| 项 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| JDK | OpenJDK 17.0.20.1(主)+ OpenJDK 1.8.0_504(兼容实测) |
| XMLBeans | org.apache.xmlbeans:xmlbeans:5.4.1(Maven Central 最新 release) |
| Saxon | net.sf.saxon:Saxon-HE:12.10 + org.xmlresolver:xmlresolver:5.3.3 |
| 工作目录 | /work(/work/schema 存放 XSD 与实例,/work/mvn-quick 为示例工程) |
Schema 沿用订单示例(order.xsd 经 xs:include 引用 types.xsd,目标命名空间 http://example.com/order,完整内容见《Apache XMLBeans 5.4.1 快速入门与集成示例》第一节)。
二、scomp 工具总览
2.1 5.x 的现实:没有独立安装包,编译器就在主 jar 里
5.x 不再发布传统 bin 分发包:官方下载目录 downloads.apache.org/xmlbeans/ 已下线(404),archive.apache.org/dist/xmlbeans/binaries/ 最新只到 2.6.0。scomp 的全部能力内置在 Maven Central 的 xmlbeans-5.4.1.jar 中,命令行入口是主类 org.apache.xmlbeans.impl.tool.SchemaCompiler。
jar 内还有一个同名系类 org.apache.xmlbeans.impl.tool.XMLBean——实测它是 Ant 任务而非命令行入口:类继承 org.apache.tools.ant.taskdefs.MatchingTask,且没有 main 方法,直接调用会因缺 ant 依赖而加载失败:
# java -cp xmlbeans-5.4.1.jar org.apache.xmlbeans.impl.tool.XMLBean
Error: Could not find or load main class org.apache.xmlbeans.impl.tool.XMLBean
Caused by: java.lang.NoClassDefFoundError: org/apache/tools/ant/taskdefs/MatchingTask
结论:命令行一律用 SchemaCompiler(实测带 public static void main(String[]));XMLBean 类仅在 Ant 构建里配合 ant.jar 使用。
2.2 工具自述与版本
# java -cp xmlbeans-5.4.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -version
org.apache.xmlbeans, Apache XmlBeans.XmlBeans version 5.4.1
# java -cp xmlbeans-5.4.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -help
Compiles a schema into XML Bean classes and metadata.
Usage: scomp [opts] [dirs]* [schema.xsd]* [service.wsdl]* [config.xsdconfig]*
Options include:
-cp [a;b;c] - classpath
-d [dir] - target binary directory for .class and .xsb files
-src [dir] - target directory for generated .java files
-srconly - do not compile .java files or jar the output.
-out [xmltypes.jar] - the name of the output jar
-name - the name of the schema type - defaults to autogenerated name
-dl - permit network downloads for imports and includes (default is off)
-noupa - do not enforce the unique particle attribution rule
-nopvr - do not enforce the particle valid (restriction) rule
-noann - ignore annotations
-novdoc - do not validate contents of <documentation>
-noext - ignore all extension (Pre/Post and Interface) found in .xsdconfig files
-compiler - path to external java compiler
-ms - initial memory for external java compiler (default '8m')
-mx - maximum memory for external java compiler (default '256m')
-debug - compile with debug symbols
-quiet - print fewer informational messages
-verbose - print more informational messages
-version - prints version information
-license - prints license information
-allowmdef "[ns] [ns] [ns]" - ignores multiple defs in given namespaces (use ##local for no-namespace)
-catalog [file] - catalog file for org.apache.xml.resolver.tools.CatalogResolver. (Note: needs resolver.jar from http://xml.apache.org/commons/components/resolver/index.html)
-partialMethods [list] - comma separated list of bean methods to be generated. Use "-" to negate and "ALL" for all.
processed left-to-right, e.g. "ALL,-GET_LIST" exclude java.util.List getters - see XmlOptions.BeanMethod
-repackage - repackage specification, e.g. "org.apache.xmlbeans.metadata:mypackage.metadata" to change the metadata directory
-copyann - copy schema annotations to javadoc (default false) - don't activate on untrusted schema sources!
-sourcecodeencoding [encodingName] - Generate Java source code with the specified encoding (ISO-8859-1 is the legacy default)
💡 技术拓展:网上旧资料(XMLBeans 2.x/3.x 时代)给出的
-help常含-javasource、-sxconly、-params、-extjars、-javaargs、-localCatalog等选项,5.4.1 实测已全部移除,传参即报Unrecognized option(3.1.4 节复现)。选参数时以本文这份实测清单为准。
2.3 前置依赖
scomp 运行期必须带 log4j-api(XMLBeans 5.x 日志门面),生成 Java 代码后的"编译代码"步骤走 JDK 内置的 javax.tools 编译器,因此必须在 JDK(含 javac)而非 JRE 上运行。两者缺一都会失败,复现见 3.1.2 与第七节。
三、scomp 编译实战
3.1 基本编译:XSD → jar
3.1.1 成功路径
# cd /work
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -out order-xmlbeans.jar schema/order.xsd
Time to build schema type system: 0.387 seconds
Time to generate code: 0.048 seconds
Time to compile code: 1.0 seconds
Compiled types to: order-xmlbeans.jar
# echo $?
0
三个阶段耗时(类型系统构建 → Java 源生成 → 代码编译)与退出码 0 都实测可复现。order.xsd 只传了主文件,它 include 的 types.xsd 被自动解析带入(见 3.2 节产物验证)。
3.1.2 缺 log4j-api 的失败复现
# java -cp xmlbeans-5.4.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -out bad.jar schema/order.xsd
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
at org.apache.xmlbeans.impl.common.XBeanDebug.<clinit>(XBeanDebug.java:126)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
... 1 more
类路径补上 log4j-api-2.26.1.jar 后即为 3.1.1 的成功输出。注意 -help 这类不触发日志初始化的操作不需要 log4j-api(第二节 -help 实测未带它也能跑)。
3.1.3 目录模式(-src / -d)
不打包 jar,分别拿源码与 class:
# cd /work
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -quiet -src gen-src -d gen-classes schema/order.xsd
# echo $?
0
# ls gen-classes/com/example/order/
AddressType.class
CustomerType.class
ItemType.class
OrderDocument.class
OrderType.class
impl
# ls gen-src/com/example/order/*.java | head -6
gen-src/com/example/order/AddressType.java
gen-src/com/example/order/CustomerType.java
gen-src/com/example/order/ItemType.java
gen-src/com/example/order/OrderDocument.java
gen-src/com/example/order/OrderType.java
gen-classes 下还有 org/ 目录(类型系统元数据 .xsb)。对生成源码做二次加工(加注释、替换包名)后,可用 javac 自行编译,或直接 -out 交给 scomp 打包。
3.1.4 失败样例与真实退出码
构造一个引用不存在类型的坏 Schema /work/schema/bad.xsd(<xs:element name="order" type="ord:OrderTypo"/>):
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -out bad.jar schema/bad.xsd
bad.xsd:6:49: error: src-resolve: type 'OrderTypo@http://example.com/order' not found.
Time to build schema type system: 0.4 seconds
BUILD FAILED
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -out bad.jar schema/bad.xsd >/dev/null 2>&1
# echo $?
1
要点:错误信息带 文件:行:列 定位(6:49 正是 OrderTypo 出现的位置);退出码 1 可直接用于脚本判断;失败时不产生任何 jar。
同一个命令若带上 5.4.1 已不存在的选项(如旧资料常见的 -javasource 1.8),实测直接报错并打印完整用法清单:
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -out order-js18.jar -javasource 1.8 schema/order.xsd
Unrecognized option: -javasource
Compiles a schema into XML Bean classes and metadata.
Usage: scomp [opts] [dirs]* [schema.xsd]* [service.wsdl]* [config.xsdconfig]*
Options include:
-cp [a;b;c] - classpath
-d [dir] - target binary directory for .class and .xsb files
-src [dir] - target directory for generated .java files
-srconly - do not compile .java files or jar the output.
-out [xmltypes.jar] - the name of the output jar
-name - the name of the schema type - defaults to autogenerated name
-dl - permit network downloads for imports and includes (default is off)
-noupa - do not enforce the unique particle attribution rule
-nopvr - do not enforce the particle valid (restriction) rule
-noann - ignore annotations
-novdoc - do not validate contents of <documentation>
-noext - ignore all extension (Pre/Post and Interface) found in .xsdconfig files
-compiler - path to external java compiler
-ms - initial memory for external java compiler (default '8m')
-mx - maximum memory for external java compiler (default '256m')
-debug - compile with debug symbols
-quiet - print fewer informational messages
-verbose - print more informational messages
-version - prints version information
-license - prints license information
-allowmdef "[ns] [ns] [ns]" - ignores multiple defs in given namespaces (use ##local for no-namespace)
-catalog [file] - catalog file for org.apache.xml.resolver.tools.CatalogResolver. (Note: needs resolver.jar from http://xml.apache.org/commons/components/resolver/index.html)
-partialMethods [list] - comma separated list of bean methods to be generated. Use "-" to negate and "ALL" for all.
processed left-to-right, e.g. "ALL,-GET_LIST" exclude java.util.List getters - see XmlOptions.BeanMethod
-repackage - repackage specification, e.g. "org.apache.xmlbeans.metadata:mypackage.metadata" to change the metadata directory
-copyann - copy schema annotations to javadoc (default false) - don't activate on untrusted schema sources!
-sourcecodeencoding [encodingName] - Generate Java source code with the specified encoding (ISO-8859-1 is the legacy default)
(这份报错后的清单与 -help 输出逐行一致,即 unrecognized 选项只是复述用法;-javasource 在 5.4.1 已不存在。)
3.2 产物结构验证
# ls -l order-xmlbeans.jar
-rw-r--r-- 1 root root 24367 Oct 15 11:17 order-xmlbeans.jar
# jar tf order-xmlbeans.jar | head -8
com/
com/example/
com/example/order/
com/example/order/OrderType.class
com/example/order/OrderDocument.class
com/example/order/impl/
com/example/order/impl/ItemTypeImpl.class
com/example/order/impl/OrderDocumentImpl.class
# jar tf order-xmlbeans.jar | wc -l
52
# jar tf order-xmlbeans.jar | grep -E 'schemaorg|metadata/src' | head -4
org/apache/xmlbeans/metadata/system/s12905AACA0B66CA5F2D25AAAD93C5E2F/TypeSystemHolder.class
org/apache/xmlbeans/metadata/system/s12905AACA0B66CA5F2D25AAAD93C5E2F/index.xsb
org/apache/xmlbeans/metadata/src/order.xsd
org/apache/xmlbeans/metadata/src/types.xsd
三条关键事实:
- 包名映射:命名空间
http://example.com/order→com.example.order,全局元素order生成OrderDocument,四个命名类型各生成同名接口 +impl实现类。 - include 自动带入:
metadata/src下同时有order.xsd与types.xsd,说明xs:include被完整解析(3.3 节的显式双文件编译是它的对照实验)。 - 类型系统指纹:
system/s12905AACA0B66CA5F2D25AAAD93C5E2F目录名是内容摘要,Schema 内容变化会生成新目录名;TypeSystemHolder是运行期加载入口(getContextTypeLoader().findElement等 API 的数据源)。
3.2.1 显式双文件编译(对照实验)
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -quiet -out order-two.jar schema/types.xsd schema/order.xsd
# echo $?
0
# ls -l order-two.jar
-rw-r--r-- 1 root root 24387 Oct 15 12:03 order-two.jar
多个 XSD(或 WSDL)可以并列传入,退出码 0、产物 24387 字节与单文件版(24367)几乎一致——因为类型集合相同,仅元数据组织略有差异。日常建议仍以"传入口文件 + include 自动解析"为主,避免把同一类型编译进多个类型系统。
3.3 与 Maven 工程的集成
生成的 jar 用 install:install-file 进本地仓库后即可作为普通依赖引用(命令与 dependency:tree 回显见《快速入门》4.2 节)。由于 scomp 在"编译代码"阶段使用 JDK 内置编译器,同一 jar 在 JDK 17 上生成时字节码仍锁定 Java 8(4.1 节实测),CI 机器 JDK 版本不影响产物兼容性。
四、生成 jar 的使用要点
4.1 字节码基线实测
在 JDK 17 上执行 scomp,抽出生成的 OrderDocument.class 反查版本:
# mkdir -p /tmp/ex && cd /tmp/ex
# jar xf /work/order-xmlbeans.jar com/example/order/OrderDocument.class
# od -An -tu1 -N8 com/example/order/OrderDocument.class | awk '{print "major="$8}'
major=52
major=52 即 Java 8:scomp 生成代码的目标版本与运行 scomp 的 JDK 无关,恒为 Java 8 基线。这决定了"一次生成、JDK 8/11/17 通吃"的部署方式,也是第七节 JDK 8 回退方案的可行性依据(XMLBeans 主 jar 同样是 major=52,javap -v 实测同值)。
4.2 生成类的 API 面
对生成接口做 javap 自省(节选):
# javap -cp /work/order-xmlbeans.jar com.example.order.OrderType | head -6
public interface com.example.order.OrderType extends org.apache.xmlbeans.XmlObject {
public static final org.apache.xmlbeans.SchemaType type;
public abstract java.lang.String getId();
public abstract org.apache.xmlbeans.XmlString xgetId();
public abstract void setId(java.lang.String);
public abstract void xsetId(org.apache.xmlbeans.XmlString);
每个属性生成四个方法:普通 getter/setter(Java 原生类型)与 x 前缀版本(XmlString 等类型化对象),列表属性额外有 addNewItem()/getItemList()。这个 SchemaType type 静态字段就是第六节 Schema 自省的类型来源。
五、XPath/XQuery 引擎分层(Saxon 边界实测)
5.4.1 内置一个 XPath 子集引擎处理无谓词的简单路径;带谓词([])的路径在编译期回退到 Saxon 引擎。用《快速入门》第五节的 QueryDemo 做三态实测:
| 类路径 | 简单路径 | 谓词路径 | 实测结论 |
|---|---|---|---|
| 仅 xmlbeans + log4j-api | 命中 | NoClassDefFoundError: net/sf/saxon/sxpath/XPathStaticContext | 内置引擎兜底简单路径 |
| + Saxon-HE 12.10 | 命中 | NoClassDefFoundError: org/xmlresolver/Resolver | Saxon 还要 xmlresolver |
| + Saxon-HE + xmlresolver 5.3.3 | 命中 | 命中 | 完整 XPath 2.0 / XQuery 可用 |
三段真实报错(第一段与第三段的完整回显见《快速入门》5.1/5.2 节):
Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/saxon/sxpath/XPathStaticContext
at org.apache.xmlbeans.impl.xpath.XPathFactory.getCompiledPathSaxon(XPathFactory.java:142)
...
Exception in thread "main" java.lang.NoClassDefFoundError: org/xmlresolver/Resolver
at net.sf.saxon.lib.CatalogResourceResolver.<init>(CatalogResourceResolver.java:46)
at net.sf.saxon.Configuration.init(Configuration.java:387)
...
Maven 方式下 Saxon-HE:12.10 的 POM 会传递带入 xmlresolver:5.3.3,无需手工处理;手工拼类路径(jar 直跑)必须两个都带。另有一个实测行为坑:无类型解析(未绑定 Schema)的文档里,order by $i/ord:price 按字符串比较排序("399.0" > "1899.0"),需写 xs:double($i/ord:price) 显式转换,复现与修复对照见《快速入门》5.3 节。
六、实例校验:CLI 与编程式双通道
6.1 CLI 校验器 InstanceValidator
jar 内还带一个独立的实例校验工具,用法自述:
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.InstanceValidator
Compiles a schema into XML Bean classes and metadata.
Usage: validate [-dl] [-nopvr] [-noupa] [-license] schema.xsd instance.xml
对合法与非法实例各实测一次(非法实例缺必填属性 id,且 qty="abc"):
# cd /work
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.InstanceValidator schema/order.xsd schema/order.xml
schema/order.xml valid.
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.InstanceValidator schema/order.xsd schema/order-invalid.xml
schema/order-invalid.xml NOT valid.
/work/schema/order-invalid.xml:2:66: error: cvc-complex-type.4: Expected attribute: id in element order@http://example.com/order
/work/schema/order-invalid.xml:12:37: error: decimal: Invalid decimal value: unexpected char '97'
# java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.InstanceValidator schema/order.xsd schema/order-invalid.xml >/dev/null 2>&1
# echo $?
1
三个要点:错误信息带精确行列号(2:66、12:37);退出码 1/0 可直接进脚本;该工具不需要生成类型 jar——它现场编译传入的 schema.xsd(实测去掉 order-xmlbeans.jar 后回显不变),适合 CI 里对 XML 实例做纯校验。
6.2 编程式 validate()
XmlObject.validate(XmlOptions) + 错误监听器的实测输出(《快速入门》TypedDemo 的非法实例部分):
validate = false errors = 2
line -1, col -1: Expected attribute: id in element order@http://example.com/order
line -1, col -1: Invalid decimal value: unexpected char '97'
错误内容与 CLI 一致,但 line/col 为 -1——这是 validate() 错误监听器的实测行为(XmlError 未附加位置)。需要行列号时用 6.1 的 CLI 通道;需要把错误接入业务逻辑(如收集后统一处理)时用监听器通道。
七、JDK 兼容性实测
7.1 双 JDK 全流程
同一台服务器装了 OpenJDK 17.0.20.1 与 OpenJDK 1.8.0_504(apt 包 openjdk-8-jdk),对 scomp 与运行期分别实测:
# /usr/lib/jvm/java-8-openjdk-amd64/bin/java -version
openjdk version "1.8.0_504"
OpenJDK Runtime Environment (build 1.8.0_504-8u504-ga-1ubuntu1~22.04.3-b01)
OpenJDK 64-Bit Server VM (build 25.504-b01, mixed mode)
# /usr/lib/jvm/java-8-openjdk-amd64/bin/java -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar org.apache.xmlbeans.impl.tool.SchemaCompiler -out order-jdk8.jar schema/order.xsd
Time to build schema type system: 0.463 seconds
Time to generate code: 0.045 seconds
Time to compile code: 0.723 seconds
Compiled types to: order-jdk8.jar
# echo $?
0
JDK 8 下 javac 编译示例类并运行(含 Saxon 的 XPath/XQuery):
# /usr/lib/jvm/java-8-openjdk-amd64/bin/javac -encoding UTF-8 -cp xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar:order-xmlbeans.jar:Saxon-HE-12.10.jar:xmlresolver-5.3.3.jar -d out8 mvn-quick/src/main/java/demo/*.java
# echo $?
0
# /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dfile.encoding=UTF-8 -cp out8:xmlbeans-5.4.1.jar:log4j-api-2.26.1.jar:order-xmlbeans.jar:Saxon-HE-12.10.jar:xmlresolver-5.3.3.jar demo.TypedDemo
id = A-2026-1015 date = Thu Oct 15 00:00:00 GMT 2026
customer = 张伟 <zhangwei@example.com> vip = true
地址 = 广东省 深圳市 科技园南路 88 号
item SKU-1001 qty=2 price=399.0 name=机械键盘
...
合计 = 3474.0
---- 修改并校验 ----
validate = true errors = 0
结论:XMLBeans 5.4.1 主 jar(major=52)、scomp 生成 jar(major=52)在 JDK 8 与 17 上行为一致;官方"JDK 8+"基线在本环境双向实测成立。CentOS 8 平台的补充实测(1.8.0_312 + 17.0.1)见《CentOS 8 安装 Apache XMLBeans 指南》第五节。
7.2 类版本错误的真实边界
兼容性只覆盖 XMLBeans 的 jar 与生成 jar——业务代码自己决定字节码目标。把示例类用 release 17 编译(major=61)后放到 JDK 8 上运行,实测直接被拒:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: demo/TypedDemo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
所以"JDK 8 回退方案"的正确姿势是:运行在 JDK 8 的机器上用 JDK 8 的 javac(或 pom 里 maven.compiler.release=8)编译业务代码;XMLBeans 侧无需任何特殊处理。
八、注意事项
- scomp 必须在 JDK 上运行:生成代码的编译走
javax.tools,JRE-only 环境拿不到系统编译器;报错前先确认javac存在(which javac)。 - log4j-api 是运行期硬依赖:命令行与内嵌调用都算;漏带时
XBeanDebug类初始化即抛NoClassDefFoundError(3.1.2 实测)。 - 旧资料选项在 5.4.1 已移除:
-javasource、-sxconly、-params等旧版选项传参即报Unrecognized option(3.1.4 实测);选项以本文实测-help清单为准,拿不准就先用最小参数集(-out+ XSD)实测。 - 错误定位选对通道:CLI 校验器给行列号,
validate()监听器给错误对象但无行列号(6.2);脚本化 CI 建议用 CLI + 退出码。 - 类型系统目录名是内容摘要:
s12905AACA...会随 Schema 内容变化,构建脚本不要把该目录名写死进配置。
九、常见问题(FAQ)
Q1:报 Could not find or load main class org.apache.xmlbeans.impl.tool.XMLBean。
调错了类:XMLBean 是 Ant 任务(继承 MatchingTask),命令行入口是 org.apache.xmlbeans.impl.tool.SchemaCompiler(2.1 节实测复现)。
Q2:scomp 报 NoClassDefFoundError: org/apache/logging/log4j/Logger。
类路径缺 log4j-api,补 log4j-api-2.26.1.jar 即可(3.1.2 实测)。
Q3:生成的 jar 在 JDK 8 上报 UnsupportedClassVersionError。
先分清是哪个 jar:XMLBeans/生成 jar 都是 major=52,不会报;报错的是业务类(如用 release 17 编译的 demo 类,7.2 实测原文)。把业务编译目标降到 8 即可。
Q4:XPath 简单路径能用、带 [] 的路径报错。
5.4.1 的引擎分层行为(第五节三态实测表):补齐 Saxon-HE 12.10 + xmlresolver 5.3.3。
Q5:旧教程里的 -javasource 1.5/-javasource 1.8 参数为什么报 Unrecognized option?
5.4.1 已彻底移除该选项,-help 清单里也没有它(2.2/3.1.4 实测原文);生成代码已固定 Java 8 目标,无需该选项。
十、参考链接
- SchemaCompiler 与 XmlBeans 工具源码:https://github.com/apache/xmlbeans(src/main/java/org/apache/xmlbeans/impl/tool)
- 官方入门指南:https://xmlbeans.apache.org/docs/getting_started_guide.html
- XmlObject Javadoc(5.4.1):https://xmlbeans.apache.org/apidocs/5.4.1/org/apache/xmlbeans/XmlObject.html
- Maven Central:https://central.maven.org/maven2/org/apache/xmlbeans/xmlbeans/
- 本系列姊妹篇:《Ubuntu 22.04 安装 Apache XMLBeans 指南》《CentOS 8 安装 Apache XMLBeans 指南》《Apache XMLBeans 5.4.1 快速入门与集成示例》《Apache XMLBeans 5.4.1 XmlObject 与 Schema API 详解》