storm拓扑中使用第三方库时出现java.lang.UnsatisfiedLinkError

标签 java linux apache-storm

我正在创建一个在其中一个 bolt 中使用第三方库 MITIE 的 Storm 拓扑。根据文档 MITIE 有一些运行所需的 native 库和 jar。

它附带了一个示例 java 类和脚本 (run.sh) 来运行它,如下所示:

 export LD_LIBRARY_PATH=/opt/MITIE/mitielib
 export CLASSPATH=/opt/MITIE/mitielib/javamitie.jar:.

 javac NerExample.java
 java NerExample

这行得通。然后我修改了我的 ~/.bashrc 文件以包含上面的两个导出,这样我就可以运行脚本而不必在其中包含这些导出。我从脚本中删除了导出语句,它也运行良好。

我的想法是,如果我在我的 ~/.bashrc 中创建这两个导出,那么当我运行我的 Storm 拓扑时,它应该能够获取库目录并也能工作。

问题是由于某种原因,当我运行我的 Storm 拓扑时它不起作用。我收到以下错误:

java.lang.UnsatisfiedLinkError: no javamitie in java.library.path

我到处寻找答案,并且厌倦了在我的 pom.xml 中使用 surefire maven 插件,如下所示:

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.library.path=${basedir}/lib/mitielib</argLine>
            </configuration>
        </plugin>

但似乎没有任何效果。有谁知道如何让 native 库在 Java Storm 拓扑项目中工作?

最佳答案

理论上,如果您将任何 jar 放入 storm 的 lib 目录中,它将包含在 clssspath 中。另一种方法是将所有依赖项打包到您要提交到集群的 jar 中。

关于storm拓扑中使用第三方库时出现java.lang.UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27970977/

相关文章:

java - 层次聚类中的距离/接近矩阵

c - 通过将参数传递给函数而导致段错误(C、Linux 上的代码块)

linux - 使用 pty(通过 ssh)和管道连接到更多时的阶梯式

apache-storm - Storm UI 未显示拓扑

java - 将 sha-1 哈希从 C# 移植到 Android/java

java - Java Gui 中的 setText 问题 JGui 在 Java 中编号不正确

apache-storm - 如何启用storm ui的安全认证?

java - 使用 StormCrawler 抓取某些 url 时出现 X509 证书异常

java - 可以保存到文件的JTable

linux - od -c(目录)获取文件名和 inode