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】
原文地址:https://www.cnblogs.com/liwanliangblog/p/15667821.html