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,就出现正确的结果
总结:检索信息很重要