• vscode编译JAXB示例出错


    1. 背景

    使用环境:

    vscode 1.63

    jdk 17

    os: CentOS Linux release 8.4.2105

    maven:Apache Maven 3.8.2

    项目要使用JAXB,因此在之前创建的项目中,粘贴了一些代码进行学习和测试

    项目的pom.xml引入jar包

         <!-- http://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core -->
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-core</artifactId>
          <version>2.2.11</version>
        </dependency>
        <!-- http://mvnrepository.com/artifact/javax.xml/jaxb-api -->
        <dependency>
          <groupId>javax.xml</groupId>
          <artifactId>jaxb-api</artifactId>
          <version>2.1</version>
        </dependency>
        <!-- http://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl -->
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-impl</artifactId>
          <version>2.2.11</version>
        </dependency>
    
    

    src/main/java/com/liwl/dev/创建LiwanLiangJAXB.java

    代码如下:

    package com.liwl.dev;
    
    //import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    public class LiwanLiangJAXB {
    
       String name;
       int age; 
       int id;
    
       public String getName() {
           return name;
       }
    
       @XmlElement
       public void setName(String name) {
           this.name = name;
       }
    
       public int getAge() {
           return age;
       }
    
       @XmlElement
       public void setAge(int age) {
           this.age = age;
       }
    
       public int getId() {
           return id;
       }
    
       @XmlElement
       public void setId(int id) {
           this.id = id;
       }
    
       @Override
       public String toString(){
           return "LiwanLiangJAXB [name=" + name + ",age=" + age + ",id=" + id + "]";
       }
    };
    

    src/test/java/com/liwl/dev/目录的MyTest.java添加代码

    package com.liwl.dev;
    
    import java.io.File;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    
    public class MyTest {
        public static void main(String[] args) {
            LiwanLiangJAXB liwljaxb = new LiwanLiangJAXB();
            liwljaxb.setName("liwanliang");
            liwljaxb.setAge(30);
            liwljaxb.setId(100);
            try {
                File file = new File("/tmp/file.xml");
                JAXBContext jaxbContext = JAXBContext.newInstance(LiwanLiangJAXB.class);
                Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
                jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
                jaxbMarshaller.marshal(liwljaxb, file);
                jaxbMarshaller.marshal(liwljaxb, System.out);
            } catch (JAXBException e) {
                e.printStackTrace();
            }
        }
    }
    

    编码完成,F5运行过程报错:

    经过同事提示,要我检索:

    module java.base dose not "open java.lang" to unnamed module @xxx

    我找到一篇类似出错的博客:

    https://www.cnblogs.com/stcweb/articles/15114266.html

    看到解决方案是,添加:--add-opens java.base/java.lang=ALL-UNNAMED选项

    在vscode配置如下:

    然后重新F5,就出现正确的结果

    image-20211209160159446


    总结:检索信息很重要

    【 欢迎交流探讨!邮箱:yunweinote@126.com】
  • 相关阅读:
    调试代码 2017-03-13
    form表单中的encType属性
    8-2、preparedStatement(预编译声明)、时间类型、大数据(保存MP3等)、批处理(针对增删改,没有查)
    子类能否重写父类的静态方法
    多态部分:Java静态绑定与动态绑定
    DBUtils使用详细示例(参考)
    平时比较常用的Exception解决方法:(随机更新)
    8-1、JDBC对象介绍(4大参数等)
    8、JDBC入门整理
    7、Java之MySQL
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/15667821.html
Copyright © 2020-2023  润新知