no snappyjava in java.library.path

本文针对Mac环境下使用Alluxio时遇到的Snappy兼容性问题提供了解决方案,包括下载特定版本的Snappy库、修改文件名及复制到JVM路径等步骤。

在使用alluxio的过程中遇到如题目中问题,因为我电脑是mac,解决方案如下:
1. 从maven center中下载snappy-java-1.1.1.7.jar
2. unzip解压在路径org/xerial/snappy/native/Mac/x86_64中找到libsnappyjava.jnilib
3. 修改名称:cp libsnappyjava.jnilib libsnappyjava.dylib
4. 放到jvm中:sudo cp libsnappyjava.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre/lib

重新运行应用就Ok了

参考资料:
http://blog.youkuaiyun.com/stark_summer/article/details/47361603
http://www.aboutyun.com/thread-15075-1-1.html

### 解决Java中`java.library.path`未找到新库的问题 在Java应用程序中,当需要加载本地库(如`.dll`、`.so`或`.jnilib`文件)时,可能会遇到`UnsatisfiedLinkError`异常。这是因为Java无法在`java.library.path`中找到所需的本地库文件[^2]。以下内容详细说明了如何将新的本地库添加到`java.library.path`中。 #### 1. 设置`java.library.path`环境变量 可以通过设置JVM参数来修改`java.library.path`的值。在启动Java应用程序时,可以使用`-Djava.library.path`参数指定包含本地库的目录。例如: ```bash java -Djava.library.path=/path/to/native/libs -jar your-application.jar ``` 此命令将`/path/to/native/libs`添加到`java.library.path`中[^1]。 #### 2. 在Eclipse中配置`java.library.path` 如果是在Eclipse中开发项目,可以通过以下步骤为整个项目设置`java.library.path`: 1. 右键点击项目,选择`Properties`。 2. 转到`Run/Debug Settings`。 3. 选择目标运行配置并点击`Edit`。 4. 转到`Arguments`选项卡,在`VM arguments`中添加如下内容: ``` -Djava.library.path=/path/to/native/libs ``` 5. 点击`Apply`并保存配置。 通过这种方式,Eclipse中的Java应用程序将在指定的路径中查找本地库文件。 #### 3. 动态加载本地库 如果无法在启动时设置`java.library.path`,可以使用`System.load()`方法动态加载本地库。例如: ```java System.load("/path/to/native/libs/libexample.so"); ``` 这种方法允许在运行时指定本地库的具体路径[^2]。 #### 4. 检查模块访问权限(适用于Java 9+) 从Java 9开始,模块化系统引入了更严格的访问控制规则。如果尝试访问某些受限字段或类时,可能会遇到类似以下错误: ``` Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module ``` 解决方法是确保JVM参数中包含适当的模块访问权限。例如: ```bash java --add-opens java.base/java.io=ALL-UNNAMED -jar your-application.jar ``` 这将允许未命名模块访问`java.base`模块中的`java.io`包[^3]。 #### 5. 避免重复加载Oracle库 如果使用的是Oracle Instant Client库,请确保`java.library.path`中仅包含一个Instant Client库目录。重复的库路径可能导致冲突或加载失败[^4]。 ```java // 示例代码:检查当前的java.library.path public class LibraryPathChecker { public static void main(String[] args) { String libraryPath = System.getProperty("java.library.path"); System.out.println("Current java.library.path: " + libraryPath); } } ``` 以上方法涵盖了静态和动态设置`java.library.path`的不同场景,能够有效解决本地库未找到的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值