Ant 媒体服务器:java.lang.reflect.InvocationTargetException

问题描述

我已经下载了 ant-media-server 文件并尝试启动服务器。
但是,我最近 learned 认为 Ant Media Server 需要 java 11。
所以我将java版本更新为java 11:
所以当我运行这个命令时:

java -version

结果如下:

openjdk 版本 "11.0.11-ea" 2021-04-20

OpenJDK 运行时环境(构建 11.0.11-ea+4-Ubuntu-0ubuntu3.16.04.1)

OpenJDK 64 位服务器 VM(构建 11.0.11-ea+4-Ubuntu-0ubuntu3.16.04.1, 混合模式,分享

当我运行这个命令时:

javac -version

结果如下:

javac 11.0.11-ea

当我尝试启动 Ant 媒体服务器时,这是我得到的结果:

Bootstrap exception: null
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.red5.server.Bootstrap.bootStrap(Bootstrap.java:122)
    at org.red5.server.Bootstrap.main(Bootstrap.java:50)
Caused by: java.lang.UnsatisfiedLinkError: no jniavutil in java.library.path: [/home/ahmed/Desktop/CodingPlayground/ant_media_server/ant_media_server/lib/native]
    at java.base/java.lang.classLoader.loadLibrary(ClassLoader.java:2670)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
    at java.base/java.lang.System.loadLibrary(System.java:1873)
    at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1683)
    at org.bytedeco.javacpp.Loader.load(Loader.java:1300)
    at org.bytedeco.javacpp.Loader.load(Loader.java:1123)
    at org.bytedeco.ffmpeg.global.avutil.<clinit>(avutil.java:14)
    at org.red5.server.Launcher.launch(Launcher.java:65)
    ... 6 more
Caused by: java.lang.UnsatisfiedLinkError: /home/ahmed/.javacpp/cache/ffmpeg-4.3.1-1.5.4-linux-x86_64.jar/org/bytedeco/ffmpeg/linux-x86_64/libjniavutil.so: libva-drm.so.2: cannot open shared object file: No such file or directory
    at java.base/java.lang.classLoader$NativeLibrary.load0(Native Method)
    at java.base/java.lang.classLoader$NativeLibrary.load(ClassLoader.java:2442)
    at java.base/java.lang.classLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
    at java.base/java.lang.classLoader.loadLibrary0(ClassLoader.java:2694)
    at java.base/java.lang.classLoader.loadLibrary(ClassLoader.java:2627)
    at java.base/java.lang.Runtime.load0(Runtime.java:768)
    at java.base/java.lang.System.load(System.java:1837)
    at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1633)
    ... 10 more

知道发生了什么吗?


编辑 1:
当我检查 JAVA_HOME 环境变量时,我发现它仍然指向 java-8 文件

JAVA_HOME=/usr/lib/jvm/java-8-oracle

所以我试图查看 /usr/lib/jvm 中的文件,这是我发现的:

enter image description here

那么这可能是导致问题的原因吗?
我不知道应该让 JAVA_HOME 指向哪个文件


编辑 2:

我打开 /etc/environment 并将 JAVA_HOME 修改为:

JAVA_HOME='/usr/lib/jvm/java-11-openjdk-amd64'

我还通过运行全局更改了它:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

而且,我仍然遇到同样的错误

解决方法

检查 /etc/profile 中的变量 你可以像这样设置java环境强文本变量:

<?xml version="1.0" encoding="UTF-8" ?>

<phpunit bootstrap="vendor/autoload.php" colors="true" verbose="true" stopOnFailure="true">

    <testsuites>
        <testsuite name="unit">
            <directory>tests</directory>
        </testsuite>
    </testsuites>

</phpunit>