簡體   English   中英

Travis CI 說 JRE 是 11 但仍然不會運行類文件版本 55 的 JAR

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM