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

Источники:

https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi

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/

Другие вопросы по тегам