Java程序使用Alpine Linux报错java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy解决
2019-11-26 17:15
661 查看
报错内容
Caused by: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.7-4a4b576a-c34c-481e-b6ac-9b4abacb112e-libsnappyjava.so: Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /tmp/snappy-1.1.7-4a4b576a-c34c-481e-b6ac-9b4abacb112e-libsnappyjava.so) nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy
描述
由于项目中使用了
org.xerial.snappy.Snappy这个类,在正常的centos系统环境下,没有问题;在微服务容器(openjdk:8-jdk-alpine)测试的时候发现有一个功能不正常,爬出了以上重要的日志
发现
org.xerial.snappy.Snappy这个类无法初始化,日志往上查发现了真实的情况,即
java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.7-4a4b576a-c34c-481e-b6ac-9b4abacb112e-libsnappyjava.so: Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /tmp/snappy-1.1.7-4a4b576a-c34c-481e-b6ac-9b4abacb112e-libsnappyjava.so
通过这个信息可以定位出是
未找到ld-linux-x86-64.so库
解决方式
由于openjdk:8-jdk-alpine容器使用的是Alpine Linux,经多方查找,可以使用以下方式解决
创建软连接,如果/lib目录下有linux-x86-64.so.2可以不用执行后边的操作,没有则需要继续安装
ln -s /lib /lib64
并安装多个库
apk add --no-cache bash tini libc6-compat linux-pam krb5 krb5-libs
bash不是必须的,只是用起来方便
最后添加到Dockerfile中如下
参考
https://issues.apache.org/jira/browse/SPARK-26995
https://github.com/apache/spark/pull/23898
https://github.com/rluta/spark/commit/f3f3b6353874bd19aa5c720a4a55ccebf29cafb1
相关文章推荐
- java.lang.NoClassDefFoundError: Could not initialize class org.springframework.beans.factory.BeanCre
- java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart
- java.lang.NoClassDefFoundError: Could not initialize class xxx 原因及解决方法
- java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.cfg.AnnotationConfiguration
- (已解决)使用jstl标签库时候出现Message java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
- java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.el.ELContextImpl
- java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer 解决方法
- 解决使用libhdfs.so连接hdfs出错问题java.lang.ClassNotFoundException: org.apache.hadoop.fs.F
- java.lang.NoClassDefFoundError: Could not initialize class org.springframework.beans.factory.BeanCre
- java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.engine.Configurat
- 使用geotools的GeoTiffReader函数时出现Could not initialize class org.hsqldb.lib.FrameworkLoggerwenti
- Junit 抛出错误 java.lang.NoClassDefFoundError: Could not initialize class org.springframework.test.conte
- Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool
- java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit异常的解决方法
- java.lang.NoClassDefFoundError: Could not initialize class org.jfree.ch
- java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.jackson.map.ObjectMapper
- java.lang.NoClassDefFoundError: Could not initialize class xxx.xxx.xxx.HibernateUtil的解决方法
- Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.fusesource
- java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.m
- java.lang.NoClassDefFoundError: Could not initialize class org.mockito.internal.util.MockUtil