使用Java Chromium Embedded Framework(JCEF)时出现了这个问题。
JCEF使用本地SO
库(libcef.so
)和SO
库来进行JNI绑定(libjcef.so
)。我相信嵌入式Chromium会在其旁边找一个名为icudtl.dat
的文件,即在库所在的目录中。
对于以下说明,假设所有这些必需文件都在同一目录中,名为jcef_libs
。
我使用JCEF编写了一个测试应用程序。编译后,如果我用java命令执行它,即
$ export LD_LIBRARY_PATH=/path/to/jcef_libs
$ java -cp src/main/java:/path/to/maven/repo/jcef.jar:/path/to/maven/repo/jogl-all/2.2.4/*:/path/to/maven/repo/gluegen-rt/2.2.4/* tests.simple.MainFrame
它完美无缺。
另一方面,由于未找到命名的exec-maven-plugin
文件,使用icudtl.dat
会引发致命错误。 POM
文件配置为使用与java命令完全相同的工件。
$ mvn exec:java -Dexec.mainClass="tests.simple.MainFrame"
[1201/123038:FATAL:content_main_runner.cc(721)] Check failed: base::i18n::InitializeICU().
我测试了java命令,并在icudtl.dat
目录中删除了jcef_libs
文件,遇到了同样的错误,即只有在找不到icudtl.dat
时才会出错。
任何帮助将不胜感激。
我一直在追踪maven在幕后做的事情。上面失败的mvn
命令在内部执行:
java -classpath /usr/share/maven2/boot/classworlds.jar -Dclassworlds.conf=/usr/share/maven2/bin/m2.conf -Dmaven.home=/usr/share/maven2 org.codehaus.classworlds.Launcher "exec:java" "-Dexec.mainClass=tests.simple.MainFrame"
即。它通过启动器执行我的测试应用程序。我不知道这个启动器将在哪里执行我的应用程序,但是,我再次需要该目录中的icudtl.dat
。
我知道如何解决这个问题?