Java 17项目中如何正确引入JAXB依赖

来源:前端技术作者:森沢头衔:网络博主
导读:本期聚焦于小伙伴创作的《Java 17项目中如何正确引入JAXB依赖》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java 17项目中如何正确引入JAXB依赖》有用,将其分享出去将是对创作者最好的鼓励。

Java 17之后,JAXB已经从标准Java库中移除,因此如果项目需要使用JAXB进行XML和Java对象之间的转换,就需要手动引入对应的依赖。不同的构建工具和不同的使用场景,需要的依赖配置也有所区别,下面会逐一说明。

Java 17项目中如何正确引入JAXB依赖

Maven项目引入JAXB依赖

如果是使用Maven作为构建工具,需要根据是否使用JAXB的实现来添加不同的依赖。如果只是需要JAXB的API,可以添加以下依赖:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

如果还需要JAXB的运行时实现,需要额外添加GlassFish提供的实现依赖:

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.1</version>
</dependency>

使用Jakarta EE版本的JAXB依赖

如果项目使用的是Jakarta EE相关的规范,可以引入Jakarta版本的JAXB依赖,API依赖配置如下:

<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>3.0.1</version>
</dependency>

对应的运行时实现依赖如下:

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>3.0.1</version>
</dependency>

Gradle项目引入JAXB依赖

对于使用Gradle构建的项目,引入JAXB依赖的方式和Maven类似,只是配置语法不同。如果需要JAXB的API,可以在build.gradle中添加如下配置:

dependencies {
    implementation 'javax.xml.bind:jaxb-api:2.3.1'
}

如果需要添加运行时实现,配置如下:

dependencies {
    implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.1'
}

Jakarta版本Gradle配置

Jakarta版本的JAXB在Gradle中的配置如下,API依赖:

dependencies {
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1'
}

运行时实现依赖:

dependencies {
    implementation 'org.glassfish.jaxb:jaxb-runtime:3.0.1'
}

依赖选择注意事项

在选择JAXB依赖版本时,需要注意以下几点:

  • 如果项目是旧项目升级到Java 17,且原本使用的是javax.xml.bind包下的类,优先选择2.x版本的JAXB依赖,避免修改大量代码。
  • 如果是新项目,建议直接使用Jakarta版本的3.x依赖,符合新的Java EE规范演进方向。
  • 依赖版本尽量选择稳定版本,避免使用过高的测试版本,防止出现兼容性问题。
  • 如果项目中同时使用了其他XML处理相关的库,需要注意依赖冲突,可以通过构建工具的分析命令排查冲突。

简单使用示例

引入依赖之后,就可以正常使用JAXB的功能了,以下是一个简单的对象转XML的示例:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

// 定义需要转换的实体类
class User {
    private String name;
    private int age;

    public User() {}

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

public class JaxbDemo {
    public static void main(String[] args) throws Exception {
        User user = new User("张三", 25);
        JAXBContext context = JAXBContext.newInstance(User.class);
        Marshaller marshaller = context.createMarshaller();
        // 设置格式化输出
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(user, writer);
        System.out.println(writer.toString());
    }
}

上述代码在引入正确的JAXB依赖后,就可以在Java 17环境中正常运行,输出对应的XML内容。

Java_17JAXB依赖引入MavenGradle修改时间:2026-06-13 03:51:15

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。