我正在创建一个风暴拓扑,在其中一个螺栓中使用第三方库mitie。根据文档,mitie有一些运行所需的本地库和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>

但似乎什么都没用。有人知道如何让本机库在java storm拓扑项目中工作吗?

最佳答案

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

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

10-12 15:09