但在这种情况下,我想使用Maven插件运行Tomcat,不幸的是,我找不到任何关于如何为Tomcat-Maven插件设置java.library.path的提示。仅仅将
argLine
设置为-Djava.library.path=XX
是无效的。有人有想法如何使用Tomcat-Maven插件包含本地库吗?根据https://groups.google.com/forum/#!msg/maven-nar/1mz9oWj-65U/dbQEK_6DLdYJ 上的说法,一种应该可以工作的方式是使用
System.setProperty("java.library.path", javaLibPath);
设置路径,然后让类加载器重新加载它。Field field = ClassLoader.class.getDeclaredField("sys_paths");
field.setAccessible(true);
field.set(null, null);
很不幸,对我而言这并不起作用,错误仍然会被抛出。(这个提示也由http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/给出)。
另一种方法(不是解决实际问题的方法,而是解决我不知道如何在Tomcat-Maven插件中加载设置java.library.path
的方法)似乎是在程序运行期间添加库,例如在此处描述的方式:Directory separator should not appear in library name: Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend.dll。不幸的是,这也不起作用。
File f2 = new File("/home/my/absolute/path");
for (File f : f2.listFiles()){
System.out.println("Datei: " + f.getAbsolutePath());
if (f.isFile() && f.getName().endsWith(".so")){
System.out.println("Loading: " + f.getAbsolutePath());
// System.loadLibrary(f.getName());
System.load(f.getAbsolutePath());
}
}
这种情况有两种可能的结果:如果我像这样尝试,会抛出与未加载库时相同的错误。如果我使用 System.loadLibrary
,它找不到库,因为库不在 java.library.path
中,并且 System.loadLibrary
不接受绝对路径 - 所以总的来说,这种方式也不起作用,至少我尝试过了。