java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXrender.so.1

本文详细介绍了在运行Jenkins时遇到AWT配置错误的解决方案,特别关注于缺失libxrender的问题,并提供了具体的安装命令来修复此问题。
AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+got+java.awt.headless+problem

java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXrender.so.1: cannot open shared object file: No such file or directory
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
    at java.lang.Runtime.load0(Runtime.java:809)
    at java.lang.System.load(System.java:1086)
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at java.awt.Toolkit$3.run(Toolkit.java:1636)
    at java.awt.Toolkit$3.run(Toolkit.java:1634)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.loadLibraries(Toolkit.java:1633)
    at java.awt.Toolkit.<clinit>(Toolkit.java:1668)
    at java.awt.Font.<clinit>(Font.java:246)
    at hudson.util.ChartUtil.<clinit>(ChartUtil.java:255)
    at hudson.WebAppMain.contextInitialized(WebAppMain.java:186)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1092)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1834)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

 

根据上面的提示,发现是少了libxrender,于是执行命令

sudo apt-get install libxrender-dev

参考:https://blog.youkuaiyun.com/ssrc0604hx/article/details/52057716 

### 错误分析 `java.lang.UnsatisfiedLinkError` 通常在 Java 应用程序尝试加载本地库时,找不到所需的共享库文件(`.so` 文件)时发生。在用户提供的案例中,错误信息明确指出缺少 `libXtst.so.6` 文件,这是 X11 的 XTest 扩展库的一部分,用于自动化测试和输入设备模拟。 该错误通常出现在基于 Linux 的系统中,尤其是在无头(headless)环境中运行 Java 应用程序时,例如服务器或容器中。`libawt_xawt.so` 是 Java AWT 工具包的一部分,它依赖于多个 X11 相关的本地库,包括 `libXtst.so.6`、`libXrender.so.1` 等。 ### 解决方案 #### 1. 安装缺失的库文件 在大多数 Linux 发行版中,可以通过安装相应的开发包或运行时库来解决此问题。 - **对于基于 Debian/Ubuntu 的系统**: ```bash sudo apt-get update sudo apt-get install libxtst6 libxrender1 ``` - **对于基于 Red Hat/CentOS/Fedora 的系统**: ```bash sudo yum install libXtst libXrender ``` - **对于基于 Alpine Linux 的容器环境**: ```bash apk add libxtst libxrender ``` 这些命令将安装 `libXtst.so.6` 和 `libXrender.so.1` 所需的运行时文件,从而解决 `UnsatisfiedLinkError` 异常 [^1]。 #### 2. 使用无头模式运行 Java 应用 如果应用程序不需要图形界面,可以尝试在无头模式下运行 Java 应用程序,以避免加载 AWT/X11 相关库。 ```bash java -Djava.awt.headless=true -jar your-application.jar ``` 此选项将禁用图形用户界面工具包,防止 JVM 尝试加载本地 AWT 库 [^2]。 #### 3. 检查 JDK 安装路径和库路径 确保 `libawt_xawt.so` 所在目录位于系统的 `LD_LIBRARY_PATH` 中,或使用 `-Djava.library.path` 参数指定库路径。 ```bash java -Djava.library.path=/usr/java/jdk1.8.0_271/jre/lib/amd64 -jar your-application.jar ``` 这将确保 JVM 能够找到并加载所需的本地库文件 [^3]。 #### 4. 使用容器环境时的注意事项 在 Docker 容器中运行 Java 应用时,需要确保基础镜像包含必要的 X11 库。可以选择基于 `openjdk:8-jdk-alpine` 的镜像,并手动安装缺失的依赖。 ```Dockerfile FROM openjdk:8-jdk-alpine RUN apk add --no-cache libxtst libxrender COPY your-application.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] ``` 这种方式可以确保容器中包含所有必要的本地库,从而避免 `UnsatisfiedLinkError` [^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值