Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在

摘要:
您可以看到ELDict类中有一个引用:importjavax。xml。绑定注释XmlAttribute;虽然未使用,但它会导致mvn编译错误。在在线绑定中搜索“包javax.xml.bind.nannotation不存在”。结果是:包javax。xml。bind Annotation不存在-CSDN论坛2009年12月2日·无法编译使用jaxb的类,因为软件包javax.xml.bind。注释不存在https://bbs.csdn.net/topics/320208203新手问题,importjavax.xml。绑定编译错误-CSDN论坛2018-6-2软件包org.apache。平民fileupload不存在-CSDN Forum 2011-05-10软件包javax。awt、java。swing不存在。请询问原因。然而,javax。xml。绑定注释XmlAttribute确实可以直接访问,并且存在于jdk8中。没有必要指定其他jar。

Jdk12 都发布了, 我也下载一个玩一玩吧。刚准备要下载,发现之前已经下载了一个11, 那就11 吧,也不用太新了。
安装了jdk11,习惯性的设置了一下环境变量: JAVA_HOME=D: ooljdk-11.0.2。
JAVA_HOME=D:Program FilesJavajdk1.8.0_201
设置完了,忘记改回去了。 项目中其实使用的是jdk8,结果运行 mvn 遇到了这么一个问题, 搞了好久才解决问题。仅此记录一下!

问题是,使用cmd 执行 mvn clean install -DskipTest=true 就会有这个问题;IDEA中直接执行就正常,IDEA中 Ctrl +F9 也是正常的(我的IDEA的java 的版本是8) 。

错误是:程序包javax.xml.bind.annotation不存在:

[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5:compile (default-compile) on project erdp_system_domain: Compilation failure
[ERROR] /E:/dev/erdp2/erdp_system/erdp_system_domain/src/main/java/com/lk/platform/system/domain/entity/ELDict.java:[4,33] 程序包javax.xml.bind.annotation不存在
[ERROR]
[ERROR] -> [Help 1]

我晕。 刚看到这个错误的时候,简直不可思议,我擦, 怎么这个破程序,这么多bug!!!

可以看到ELDict 类中确实有一个这么的引用:import javax.xml.bind.annotation.XmlAttribute;

Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在第1张

虽然是没有用到的,但是却引起的mvn 编译的错误。网上bing一把搜索“程序包javax.xml.bind.annotation不存在”,得到的是:

软件包 javax.xml.bind.annotation不存在-CSDN论坛
2009-12-2 · 用jaxb的到的类,不能编译,原因是: 软件包 javax.xml.bind.annotation不存在
https://bbs.csdn.net/topics/320208203
新手问题,import javax.xml.bind 编译出错-CSDN论坛
2018-6-2
软件包 org.apache.commons.fileupload不存在?-CSDN论坛
2011-5-10
软件包javax.awt,java.swing不存在,请教下原因。谢谢 ...
2009-12-29
软件包java.until不存在是怎么回事-CSDN论坛
2009-4-12
查看更多结果
gradle编译报错:程序包javax.annotation不存在 ...
2018-8-29 · 问题描述: 采用gradle命令编译(gradle build)时,报如下错误: XXXXXXXXXX.java:11: 错误: 程序包javax.annotation不存在 import javax.annotation.Nullable; 解决 ...
https://blog.csdn.net/yinxing2008/article/details/82185172
解决:Dagger2使用过程中的"程序包javax.annotation不存在 ...
2016-12-11 · 问题描述:采用gradle命令编译(gradlebuild)时,报如下错误:XXXXXXXXXX.java:11:错误:程序包javax.annotation不存在importjavax.annota... 博文 来自: yinxing2008 ...
https://blog.csdn.net/younghong1992/article/details/53575330
XmlAccessorOrder (Java 2 Platform SE 6)
2008-5-8 · 有关其他公共信息,请参阅 javax.xml.bind.package javadoc 中的“包规范”。 包上的 @XmlAccessorOrder 注释可应用于包中的所有类。继承语义的应用如下 ...
https://download.oracle.com/.../XmlAccessorOrder.html
java – 包org.apache.hadoop.fs不存在 -程序园
2019-1-21 · java – 包com.sun.xml.internal.bind.v2.model.annotation不存在 3. java – 包不存在错误 ... 程序包javax.servlet.annotation不存在 8. 软件包 javax.servlet 不存在 包android ...
www.voidcn.com/article/p-abbxrldb-bup.html
错误: 程序包com.sun.xml.internal.bind.v2.schemagen ...
2014-6-21 · 问题描述: 用ant来构建程序时报如下错误: 错误: 程序包com.sun.xml.internal.bind.v2.schemagen.xmlschema不存在 [javac] import com.sun.xml.internal.bind ...
www.voidcn.com/article/p-ftnsltjy-bca.html
javax.xml.bind.jar-CSDN下载
2013-8-22 · 软件包 javax.xml.bind.annotation不存在 新手问题,import javax.xml.bind 编译出错 javax.xml.bind 和javax.xml.bind.annotation.XmlType问题 真正解决方案:java.lang ...

貌似少了什么软件包? 可是, javax.xml.bind.annotation.XmlAttribute 是确实可以直接访问的,是直接存在于 jdk8 之中的, 应该不需要说明其他的 jar 吧。 另外注意但 第一个答案是 2009 年的了, 那个时候可能没有包含在 jdk之中吧。。。 直觉告诉我,可能是 jdk 版本的问题,因为我在IDEA中执行mvn就是正常的,我的IDEA的java 的版本是8。

执行java -version,返回是:

java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

好像没有什么问题啊!!

看来是个麻烦的问题,貌似大家都没有遇到过。(好像还真是如此。。)。不得已,暂时只能在IDEA运行maven。 但是这个问题一直困扰着我。。 bing 搜索javax.xml.bind.annotation does not exist, 终于看到了答案:

第一个就是 答案: https://stackoverflow.com/questions/52502189/java-11-package-javax-xml-bind-does-not-exist

According to the release-notes, Java 11removed the Java EE modules:
java.xml.bind (JAXB) -REMOVED
Java 8 -OK
Java 9 -DEPRECATED
Java 10 -DEPRECATED
Java 11 -REMOVED
See JEP 320 for more info.

原来已经被删除了!

第二个,其实验证我的想法, JAXB ( 应该就是 javax.xml.bind.annotation 包)在之前是不直接属于jdk的,需要而且的jar 引入。 https://stackoverflow.com/questions/2895777/does-jaxb-work-under-java-5

实际上可以这么引入:

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-core</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.0</version>
</dependency>

但是,到了11, JAXB这个功能又被去掉了。。 所以,有必要的话,还是需要手动引入那些个jar。

定睛一看,发现JAVA_HOME有问题,JAVA_HOME=D: ooljdk-11.0.2 ;终于 想起了之前的改动。测试一把。修改JAVA_HOME,

set JAVA_HOME=wa, 再运行 mvn,出现:

E:deverdp2erdp_baseerdp_modules>call mvn clean install -DskipTest=true
The JAVA_HOME environment variable isnot defined correctly
This environment variable is needed to run thisprogram
NB: JAVA_HOME should point to a JDK not a JRE
请按任意键继续. . .

可见 mvn 确实会直接读取 JAVA_HOME

但为什么 java -version 确实正确的呢? 查看path:

Path=.;D:	oolapache-maven-3.6.1in;D:	oolmysql-5.7.23-winx64in;C:Program Files (x86)Common FilesOracleJavajavapath;D:	ooljdk-11.0.2in;C:ProgramDataOracleJavajavapath;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;d:Program FilesGitcmd;C:Program Files (x86)ATI TechnologiesATI.ACECore-Static;C:WINDOWSSystem32OpenSSH;C:ProgramDatachocolateyin;C:UsersAdministratorAppDataLocalMicrosoftWindowsApps

原来 path先是查找到 C:Program Files (x86)Common FilesOracleJavajavapath , C:Program Files (x86)Common FilesOracleJavajavapathjava -version 返回就是 java version "1.8.0_201" !!

但是呢, maven 却是直接读取JAVA_HOME 环境变量的, 所以出现了 jdk 误以为设置正确的假象!( 其实是没有设置正确! )

再修改JAVA_HOME 为jdk8 :
set JAVA_HOME=D:Program FilesJavajdk1.8.0_201
再运行maven 程序, 正!常!了!

总结,看了jdk 也不能乱升级,虽然说Java的向后兼容做得非常非常好, 但是也不是100%兼容!特别是 javax 的一些内容,很多都是实验性质的!。。

免责声明:文章转载自《Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇支付宝支付apiubuntu中VNC的安装配置笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)React事件处理函数必须使用bind(this)的原因

1.JavaScript自身特性说明如果传递一个函数名给一个变量,之后通过函数名()的方式进行调用,在方法内部如果使用this则this的指向会丢失。示例代码:首先我们创建test对象并直接调用方法 : const test = { name:'jack', getName:function(){ console.log(this.name) }}test...

冷饭新炒:理解JDK中UUID的底层实现

前提 UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符。对于UUID的描述,下面摘录一下规范文件A Universally Unique IDentifier (UUID) URN Namespace中的一些描述: UUID(也称为GUID)定义了统一资源名称命名空间。UUID的长度为128...

编译异常 Caused by: java.lang.UnsupportedClassVersionError:

Caused by: java.lang.UnsupportedClassVersionError: com/sumingk/platform/service/impl/ServiceSysPersonImpl : Unsupported major.minor version 51.0 (unable to load class com.sumingk....

当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?

可以使用 bind 命令,bind 可以很方便地在 shell 中实现宏或按键的绑定。 在进行按键绑定的时候,我们需要先获取到绑定按键对应的字符序列。 比如获取 F12 的字符序列获取方法如下:先按下 Ctrl+V,然后按下 F12 .我们就可  以得到 F12 的字符序列 ^[[24~。 接着使用 bind 进行绑定。 [root@localh...

Linux下JDK、Tomcat安装及Web应用部署

一、JDK的安装 1、检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (bui...

JAVA(JDK)内存溢出分析工具(VISUALVM)

标签:操作类 目录 前言 问题浅出 如何使用? 收尾阶段 前言 VisualVM: 它是一个以监控、显示本地或者远程服务器 JVM工作情况,进行性能调优的工具。可以实现对JVM内存各个子池、CPU、垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题。 问题浅出 我们在写业务时有时候可能会出现一些莫名其妙的问题,比如内存溢出,换...