Jmeter não inicializa enquanto excede o comando como usuário não root

4

Eu sou capaz de iniciar o terminal jmeter form ubuntu 16.10 como usuário root. No entanto, se eu tentar iniciar o jmeter usando o usuário não-root, executando o mesmo comando que tentei no root. Estou recebendo o seguinte erro. Alguém pode me ajudar a corrigir o problema para o usuário não-root existente (não é um usuário 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

O erro parece estar relacionado a uma versão JAVA não suportada (Unsupported major.minor version 52.0). Mas você pode ver que a versão 8 suportada do JAVA já está configurada em alternativas

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
    
por cinny 14.11.2016 / 17:45

1 resposta

3

Note que este não é o resultado de testes, apenas pesquisa. A crítica construtiva a essa resposta é bem-vinda, assim como as soluções testadas.

Geralmente falando:

Esse erro parece ocorrer devido a uma incompatibilidade entre a versão do Java (JDK) usado em tempo de compilação e a versão do Java disponível no tempo de execução ou quando várias versões são instaladas simultaneamente (como parece ser o caso aqui).

Você pode verificar e comparar as versões com o compilador

javac -version

e o tempo de execução com

java -version

Para corrigir o problema real, você deve tentar executar o código Java com uma versão mais recente do Java JRE ou especificar o parâmetro target para o compilador Java para instruir o compilador a criar código compatível com versões anteriores do Java.

Existem várias maneiras de resolver isso, pois isso se resume a se você deseja abordá-lo garantindo que o código seja executado pelo JRE correto ou garantindo que o código seja compatível com o JRE usado atualmente.

Para o primeiro exemplo, uma solução é alterar o link simbólico (/ etc / alternatives / java - > / usr / lib / jvm / java-8-openjdk-amd64 / jre / bin / java) para a versão usado para compilação.

Para o último, uma solução é gerar novos arquivos de classe compatíveis com uma versão de tempo de execução anterior do Java que você está tentando usar utilizando Opções de compilação cruzada. Por exemplo, para gerar arquivos de classe compatíveis com o Java 1.4, use a seguinte linha de comando:

javac -target 1.4 HelloWorld.java

Especificamente falando:

Se você está rolando o seu próprio ou usando um binário pré-compilado do Jmeter baixado de aqui , é importante verificar a integridade. ]

Observe que o Jmeter 3.1 requer Java 7 ou posterior, portanto, deve estar funcionando com seu Java 8, mas como você não está executando o MAC OSX, não há reason não tentar com o Java 7

Outra solução possível é corrigir a variável de ambiente JAVA_HOME.

com

export JAVA_HOME=jdk-install-dir

export PATH=$JAVA_HOME/bin:$PATH

Fontes:

link

link

link

link

link

link

link

    
por Elder Geek 15.02.2017 / 14:53