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 的一些內容,不少都是實驗性質的!。。