我能够以 root 用户身份从 ubuntu 16.10 终端启动 jmeter。但是,如果我尝试使用非 root 用户通过执行与 root 用户尝试的相同命令来启动 jmeter。我收到以下错误。有人能帮我解决现有非 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 JRE 运行 Java 代码,或者向 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#classpath
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/