是否有可能在运行时为本机库添加新路径?。(而不是使用Java.library.path属性启动Java),因此在尝试查找nativeLibraryName
时,调用system.loadlibrary(nativeLibraryName)
将包含该路径。这是可能的,还是一旦JVM启动,这些路径就被冻结了?
[此解决方案不适用于Java10+]
如果没有很少的黑客攻击(即访问ClassLoader类的私有字段),这似乎是不可能的
这个博客提供了两种方法。
public static void setLibraryPath(String path) throws Exception {
System.setProperty("java.library.path", path);
//set sys_paths to null so that java.library.path will be reevalueted next time it is needed
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
}
/**
* Adds the specified path to the java library path
*
* @param pathToAdd the path to add
* @throws Exception
*/
public static void addLibraryPath(String pathToAdd) throws Exception{
final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
usrPathsField.setAccessible(true);
//get array of paths
final String[] paths = (String[])usrPathsField.get(null);
//check if the path to add is already present
for(String path : paths) {
if(path.equals(pathToAdd)) {
return;
}
}
//add the new path
final String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
newPaths[newPaths.length-1] = pathToAdd;
usrPathsField.set(null, newPaths);
}
问题内容: 是否可以在运行时为本机库添加新路径?(而不是使用属性java.library.path启动Java),因此在尝试查找时,对的调用将包含该路径。这是可能的,还是在JVM启动后冻结了这些路径? 问题答案: [此解决方案不适用于Java 10+] 没有一点黑客(即访问ClassLoader类的私有字段)似乎是不可能的 该博客提供了两种方法。 作为记录,这是简短版本。 选项1: 用新值完全替换
问题内容: 如何在Java运行时添加camel路线?我找到了Grails示例,但是已经用Java实现了。 我的applicationContext.xml已经有一些预定义的静态路由,我想在运行时为其添加一些动态路由。可能吗?因为包括动态路由的唯一方法是编写route.xml,然后将路由定义加载到上下文。它如何在现有静态路由上工作? 问题答案: 你可以在CamelContext上简单地调用一些不同的
我有以下分布 主要的jar包含main方法,我想在其中访问lib提供的本机函数。所以被捆绑在发行版中。开始sh只需设置java的类路径和引导。 加载库的最佳方法是什么。那么应用程序内部的库呢?我知道两种方法: 系统。加载(绝对路径) 系统。loadLibrary(名称) 前者需要库在文件系统中的绝对路径,后者需要设置特定于应用程序的java。图书馆路径JVM参数。在这种情况下,哪种解决方案更好?将
如何在Java的运行时添加骆驼路线?我找到了一个Grails示例,但我已经在Java实现了它。 我的应用程序上下文。xml已经有一些预定义的静态路由,我想在运行时向它添加一些动态路由。可能吗?因为包含动态路由的唯一方法是编写路由。然后将路由定义加载到上下文。它将如何在现有的静态路由上工作?运行时路由
根据在Java构建路径上找不到超类“javax.servlet.http.HttpServlet”,我完成了以下操作。项目属性->Java构建路径->添加库->从列表中选择“服务器运行时”->下一步->选择“Apache Tomcat”->完成 而且效果很好。但我不明白这个程序的用途。请告诉我为什么我们要将服务器运行时库添加到java构建路径中。
问题内容: 我想在Tomcat中添加gdal库。我读了Tomcat中找不到的本机库,但不知道应该在哪里添加。 错误: 我从以下网址下载了gdal 64位:http ://vbkto.dyndns.org:1280/sdk/PackageList.aspx?file= release-1600-x64-gdal-1-9-mapserver-6-2.zip 问题答案: 必须在而不是startup.ba