![](/img/trans.png)
[英]Why latest jre won't run jar compiled with older version of jdk?
[英]Travis CI says JRE is 11 but still won't run JAR of class file version 55
我有一個連接到 Travis CI 構建的 Python 應用程序。 測試運行后,我需要啟動應用程序,然后運行 JAR 文件以完成測試。 JAR 文件是用 Java 11 編譯的,類文件版本為 55。在我的構建中,我得到以下異常:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/myApp/main/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
編輯:添加了其余的例外
要檢查 Travis 實例中的 Java 版本,我有一個java -version
行,它返回以下內容:
$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
那么為什么異常表現得像 Travis 實例正在運行早期版本的 Java? 我在本地遇到了同樣的問題,並且能夠通過將我的 JRE 從 Java 8 更改為 11 來修復它,此后再也沒有出現任何問題。 java -version
命令是不是像我想的那樣告訴我 JRE 版本? 有沒有辦法可以使用.travis.yml
文件更改 Travis 實例的 JRE?
如有必要,這里是.travis.yml
的相關部分:
after_script:
- chmod +x ~/build.sh
- chmod 777 ./tests/LPT/myApp.jar
- bash ~/build.sh
- java -version # output of this is shown in question
- sudo java -jar ./tests/LPT/myApp.jar ./tests/LPT/input.json
^ Last line triggers the exception shown in question
出於安全原因, sudo
的默認策略通常會清除許多環境變量,並且當您構建應用程序並以正常權限運行java -version
檢查時,您正在使用sudo java
來實際運行它。 您可能會在這兩種環境中獲得不同的PATH
和/或JAVA_HOME
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.