Jmeter не запускается при исключении команды от имени пользователя без полномочий root
Я могу запустить терминал jmeter из Ubuntu 16.10 от имени пользователя root. Однако, если я пытаюсь запустить jmeter, используя пользователя без полномочий root, выполнив ту же команду, что и в try для root. Я получаю следующую ошибку. Может ли кто-нибудь помочь мне решить проблему для существующего пользователя без полномочий root (не пользователь sudo)
user@laptop1:~$jmeter
java.lang.UnsupportedClassVersionError: com/thoughtworks/xstream/converters/ConversionException : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2398)
at java.lang.Class.getConstructor0(Class.java:2708)
at java.lang.Class.newInstance0(Class.java:328)
at java.lang.Class.newInstance(Class.java:310)
at org.apache.jmeter.NewDriver.main(NewDriver.java:262)
JMeter home directory was detected as: /usr/share/jmeter
Похоже, ошибка связана с неподдерживаемой версией JAVA (неподдерживаемая версия major.minor 52.0). Но вы можете видеть, что поддерживаемая JAVA версия 8 уже настроена в альтернативах
update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
-----------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 auto mode
1 /usr/lib/jvm/java-6-oracle/jre/bin/java 2 manual mode
2 /usr/lib/jvm/java-7-oracle/jre/bin/java 1 manual mode
* 3 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
guest@duriel:~$ which java
/usr/bin/java
$ ls -la /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 27 2015 /usr/bin/java -> /etc/alternatives/java
$ ls -la /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Feb 9 09:43 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
$ ls -la /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
-rwxr-xr-x 1 root root 6456 Jan 24 14:22 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
$ update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 auto mode
1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
1 ответ
Обратите внимание, что это не результат тестирования, просто исследование. Конструктивная критика этого ответа приветствуется, так как это проверенные решения.
Вообще говоря:
Эта ошибка возникает из-за несоответствия между версией Java (JDK), используемой во время компиляции, и версией Java, доступной во время выполнения, или когда несколько версий установлены одновременно (как, кажется, имеет место здесь).
Вы можете проверить и сравнить версии для компилятора
javac -version
и время выполнения с
java -version
Чтобы исправить реальную проблему, вы должны попытаться либо запустить код Java с более новой версией Java JRE, либо указать целевой параметр для компилятора Java, чтобы дать указание компилятору создавать код, совместимый с более ранними версиями Java.
Есть несколько способов решить эту проблему, и, похоже, все сводится к тому, хотите ли вы приблизиться к этому, убедившись, что код будет выполняться правильным JRE, или гарантируя, что код совместим с используемым в настоящее время JRE.
В первом случае одним из возможных решений является изменение символической ссылки (/etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java) на версию, используемую для компиляции.
В последнем случае решение заключается в создании новых файлов классов, совместимых с более ранней версией Java, которую вы пытаетесь использовать, используя параметры кросс-компиляции. Например, для создания файлов классов, совместимых с Java 1.4, используйте следующую командную строку:
javac -target 1.4 HelloWorld.java
Конкретно говоря:
Независимо от того, катите ли вы свой собственный или используете предварительно собранный двоичный файл Jmeter, загруженный отсюда, важно проверить целостность. ]
Обратите внимание, что Jmeter 3.1 требует Java 7 или более поздней версии, поэтому он должен работать с вашей Java 8, но, поскольку вы не используете MAC OSX, нет причин не пробовать его с Java 7
Другое возможное решение - исправить переменную среды JAVA_HOME.
С
export JAVA_HOME=jdk-install-dir
export PATH=$JAVA_HOME/bin:$PATH
Источники:
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
http://www.manpagez.com/man/1/javac/
http://jmeter.apache.org/usermanual/get-started.html
https://jmeter.apache.org/download_jmeter.cgi
https://jmeter.apache.org/changes.html
https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/