当前位置: 首页 > 知识库问答 >
问题:

从类路径加载本机库

江鸿羲
2023-03-14
src/main
      | java
      | resources
         | library.dll

在运行jar文件时,有没有可能将资源文件夹添加到库搜索路径中,而不必做额外的配置?例如。使用与清单中的class-path类似的设置?

共有1个答案

亢胤运
2023-03-14

直到今天(1.7.0_55和1.8.0_05)仍然存在一个老式的黑客攻击,允许您使用System.setProperty()执行运行时更新,并让JVM注意到这个更改。通常,您要执行以下操作:

System.setProperty("java.library.path", yourPath);
Field sysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
sysPath.setAccessible( true );
sysPath.set( null, null );
System.loadLibrary(libraryName);

Google java sys_paths并查找有关此技术的文章。

注意处理错误/异常。根据需要还原原始路径。

 类似资料:
  • 问题内容: 我有一个遵循标准目录布局的项目设置(虽然未使用Maven): 本机DLL位于资源文件夹中,而源位于Java文件夹中。resources文件夹是Java类路径的成员。 我现在想加载DLL,而不必设置JRE 选项或设置变量,以便可以通过简单的双击来启动生成的jar文件。 运行jar文件时是否可以将资源文件夹添加到库搜索路径而无需进行其他配置?例如,设置与清单中的相似? 问题答案: 直到今天

  • 我有以下分布 主要的jar包含main方法,我想在其中访问lib提供的本机函数。所以被捆绑在发行版中。开始sh只需设置java的类路径和引导。 加载库的最佳方法是什么。那么应用程序内部的库呢?我知道两种方法: 系统。加载(绝对路径) 系统。loadLibrary(名称) 前者需要库在文件系统中的绝对路径,后者需要设置特定于应用程序的java。图书馆路径JVM参数。在这种情况下,哪种解决方案更好?将

  • 问题内容: 我正在使用一些第三方代码,这些代码在给定“ -classpath”命令行参数时不会设置java.class.path,而是仅创建一个类加载器,将命令行中指定的类路径中所有项的所有url添加到类加载器,然后将其设置为上下文类加载器。在我编写的此代码的插件类中,我获得了该类加载器的实例,并且需要以某种方式使用它来获取基础类路径,以便可以在JavaCompiler.getTask(… ),并

  • 我正在尝试将资源csv文件传递到我的Sprint Boot应用程序使用的jar中。尽管方法获取的资源参数=ReactiveWebContext资源[src/main/Resources/file.csv],但我总是得到该文件不存在的响应 > 在我的项目中,文件位于src/main/resources/file中。csv 正在应用中。属性,我定义: 在config类中: 在内部jar:Config类

  • 我有一个Spring Cloud配置服务器,它使用密钥库解密git服务器中的值。如果我使用文件路径引用密钥库,它会按预期工作并解密{cipher}值。但是,如果我尝试从类路径加载密钥库,它会停止工作,出现以下错误:CipherEnvironmentEncryptor.decrypt-无法解密密钥:用户名(类java.lang.IllegalStateException:无法从存储中加载密钥:类路径

  • 问题内容: 在Java中,您可以使用相同的API,但使用不同的URL协议来加载各种资源: 这很好地将资源的实际加载与需要资源的应用程序分离开来,并且由于URL只是一个字符串,因此资源加载也很容易配置。 是否有使用当前类加载器加载资源的协议?这类似于Jar协议,除了我不需要知道资源来自哪个jar文件或类文件夹。 我当然可以使用来做到这一点,但这需要我使用不同的API,因此需要对现有代码进行更改。我希