如何使用xjc从.XSD文件生成Java类?新版本JDK无xjc如何解决
Unable to locate an executable at "/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin/xjc" (-1)
问题原因
JDK 9 及更高版本已经将JAXB(Java Architecture for XML Binding)相关组件包括xjc工具从JDK内置模块中移除,所以你使用的JDK 11环境默认不存在xjc可执行文件,触发上述路径找不到报错。
本地快速安装使用xjc的方案
下面提供三种常用方案,可根据你的使用场景选择:
方案1:通过Maven插件执行(无需单独配置环境变量,推荐)
适合已经使用Maven作为项目构建工具的场景,无需单独下载安装xjc工具:
- 在项目
pom.xml的<build>→<plugins>节点下添加如下配置:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>generate-java-from-xsd</id> <goals> <goal>xjc</goal> </goals> <configuration> <!-- 替换为你自己的xsd文件路径 --> <sources> <source>src/main/resources/your_schema.xsd</source> </sources> <!-- 替换为生成Java类的目标包名 --> <packageName>com.yourcompany.generated</packageName> </configuration> </execution> </executions> </plugin>
- 终端执行生成命令:
mvn jaxb2:xjc - 生成的Java类默认输出到
target/generated-sources/jaxb目录下
方案2:下载独立xjc可执行包(无构建工具依赖)
适合需要单独使用xjc命令、不想依赖项目构建工具的场景:
- 搜索并下载JAXB官方独立发布包
jaxb-ri,选择2.3.1及以上版本即可兼容JDK 11+ - 解压下载的zip包后,将解压得到的
bin目录添加到系统环境变量PATH中 - 验证安装是否成功:终端执行
xjc -version,正常输出版本信息即为安装成功 - 生成Java类命令示例:
xjc 你的xsd文件路径 -p 目标包名 -d 输出目录路径
方案3:通过Gradle执行
适合使用Gradle作为项目构建工具的场景:
- 在项目
build.gradle中添加如下配置:
plugins { id 'java' id 'org.openjax.jaxb' version '0.9.0' } jaxb { xjc { // 替换为xsd文件所在目录路径 srcDir = 'src/main/resources/schema' // 替换为生成类的输出根路径 destDir = 'src/main/java' // 替换为生成类的目标包名 packageName = 'com.yourcompany.generated' } }
- 终端执行生成任务:
gradle xjc
注意事项
如果生成Java类后,项目运行时提示JAXB相关类找不到,需要额外引入JAXB运行时依赖,Maven依赖示例如下:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.6</version> <scope>runtime</scope> </dependency>
内容的提问来源于stack exchange,提问作者TariqN
相关产品推荐
相关产品推荐

