У меня есть простая установка TestNG, где я вызываю основной класс из командной строки. Тесты проходят отлично.Java UnsupportedClassVersionError (51), но только при выполнении команды с удаленного компьютера
Я запускаю их из командной строки, потому что мне нужно вызвать выполнение из Центра качества HP. Это также работает, пока QC-клиент запускает командную строку, работает в том же месте, что и скомпилированные тестовые классы.
Однако, если я пытаюсь вызвать командную строку с удаленного хоста, я получаю незначительную значительную ошибку 51. Я знаю, что это означает, что классы были скомпилированы с использованием java 1.7, и попробуйте запустить с использованием более низкого уровня java. Я не понимаю, как и почему он использует более низкую версию java. Командная строка java -version
показывает, что исполняющая виртуальная машина имеет java 1.8_91. Раньше у него было 1.6_19, но я обновил его. Я также изменил системные переменные для пути и JAVA_HOME и просмотрел другие системные переменные, не найдя ничего, что выделяется.
Как возможно, что командная строка запускает две разные версии среды выполнения java при выполнении с локального и удаленного хоста? Как я могу исправить это, так что они используют 1.8 в обоих случаях?
PS, понижая скомпилированные классы 1.6 не вариант, так как TestNG является depentend uopn 1,7
здесь исключение брошено:
Error Number: 8
Source: executeCommand
Description: java.lang.UnsupportedClassVersionError: org/testng/TestNG : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: org.testng.TestNG. Program will exit.
Exception in thread "main" While executing command: java -cp c:\test\Execution\lib\*;c:\test\Execution\bin org.testng.TestNG c:\test\Execution\testng.xml
и сама команда:
C:\Users\myUser>java -cp C:\test\Execution\lib\*;C:\test\Execution\bin org.testng.TestNG C:\test\Execution\testng.xml
lib содержит некоторые файлы jar, такие как Selenium и TestNG. testng.xml может содержать конфигурации для того, какие тесты будут выполняться внутри класса, но в этом случае пуст. В папке bin хранится скомпилированная тестовая сцена Java, а также некоторые файлы данных, используемые для параметров.
UPDATE: я, конечно, должен быть запустить простой java -version
, с самого начала, но теперь у меня есть, а вот результаты:
При запуске из командной строки непосредственно внутри VM:
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
при выполнении из Quality Center Script, из браузера внутри виртуальной машины (здесь мне нужно сохранить в файл, чтобы увидеть фактический выход, и что только кажется, работает при использовании java -verbose -version
):
[Opened D:\java\JDK 1.8.0_91\lib\rt.jar]
[Loaded java.lang.Object from D:\java\JDK 1.8.0_91\lib\rt.jar]
[Loaded java.io.Serializable from D:\java\JDK 1.8.0_91\lib\rt.jar]
... etc
При выполнение из Quality Center Script, из браузера за пределами виртуальной машины (также java -verbose -version
):
[Loaded java.lang.Object from shared objects file]
[Loaded java.io.Serializable from shared objects file]
[Loaded java.lang.Comparable from shared objects file]
....
[Opened C:\Program Files (x86)\Java\jre6\lib\rt.jar]
....
После удаления вышеупомянутой папки Java, и все это содержание, вывод команды был полностью пустым , в моем текстовом файле.
этот вопрос, what is shared objects file?, дает мне немного понять в том, что происходит, но я до сих пор не понимаю, почему один конкретное выполнение выбирает другой JRE, чем другие, или как это исправить ...
это может помочь мне думать [ссылка] (HTTP: // stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi) – viveksinghggits
@viveksinghggits, спасибо, но нет. Я прочитал это сообщение раньше, и это только подтверждает те части, которые я уже описал, что я пробовал. Эта ошибка гораздо более специфична, чем общий случай незначительной серьезной ошибки 51. – KjetilNordin
вам необходимо убедиться, что java, используемая HP QC, точно соответствует той, которая вам нужна (1.7). – ACV