Jdk升級到11引發的問題:程序包javax.xml.bind.annotation不存在


Jdk12 都發布了, 我也下載一個玩一玩吧。剛準備要下載,發現以前已經下載了一個11, 那就11 吧,也不用太新了。

安裝了jdk11,習慣性的設置了一下環境變量: JAVA_HOME=D:\tool\jdk-11.0.2。

JAVA_HOME=D:\Program Files\Java\jdk1.8.0_201

設置完了,忘記改回去了。 項目中其實使用的是jdk8,結果運行 mvn 遇到了這麼一個問題, 搞了很久才解決問題。僅此記錄一下!html



問題是,使用cmd 執行 mvn clean install -DskipTest=true 就會有這個問題;IDEA中直接執行就正常,IDEA中 Ctrl +F9 也是正常的(個人IDEA的java 的版本是8) 。java

錯誤是:程序包javax.xml.bind.annotation不存在:mysql

[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!!!android

能夠看到ELDict 類中確實有一個這麼的引用:import javax.xml.bind.annotation.XmlAttribute;sql

 

 雖然是沒有用到的,可是卻引發的mvn 編譯的錯誤。網上bing一把搜索「程序包javax.xml.bind.annotation不存在」,獲得的是:apache

軟件包 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。api

執行java -version,返回是:oracle

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)

好像沒有什麼問題啊!!dom

 

看來是個麻煩的問題,貌似你們都沒有遇到過。(好像還真是如此。。)。不得已,暫時只能在IDEA運行maven。 可是這個問題一直困擾着我。。 bing 搜索javax.xml.bind.annotation does not exist, 終於看到了答案:maven

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

According to the release-notes, Java 11 removed 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:\tool\jdk-11.0.2 ;終於 想起了以前的改動。測試一把。修改JAVA_HOME,

set JAVA_HOME=wa, 再運行 mvn,出現:

E:\dev\erdp2\erdp_base\erdp_modules>call mvn clean install -DskipTest=true
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
請按任意鍵繼續. . .

可見 mvn 確實會直接讀取 JAVA_HOME

 

但爲何 java -version 確實正確的呢? 查看path:

Path=.;D:\tool\apache-maven-3.6.1\bin;D:\tool\mysql-5.7.23-winx64\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;D:\tool\jdk-11.0.2\bin;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;d:\Program Files\Git\cmd;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\WINDOWS\System32\OpenSSH\;C:\ProgramData\chocolatey\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps

原來 path先是查找到 C:\Program Files (x86)\Common Files\Oracle\Java\javapath , C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java -version 返回就是 java version "1.8.0_201" !!

 

可是呢, maven 倒是直接讀取JAVA_HOME  環境變量的, 因此出現了 jdk 誤覺得設置正確的假象!( 實際上是沒有設置正確! )

 

再修改JAVA_HOME 爲jdk8 :
set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_201

再運行maven 程序, 正!常!了!

 


總結,看了jdk 也不能亂升級,雖說Java的向後兼容作得很是很是好, 可是也不是100%兼容!特別是 javax 的一些內容,不少都是實驗性質的!。。

相關文章
相關標籤/搜索