使用 maven 将 dll 添加到 java.library.path
Posted
技术标签:
【中文标题】使用 maven 将 dll 添加到 java.library.path【英文标题】:Add dll to java.library.path using maven 【发布时间】:2020-05-25 08:33:43 【问题描述】:我有一个依赖于我希望能够通过 Maven 运行的系统库的程序。我已经很好地配置了程序并且 maven 运行,但是当它必须加载系统库时失败,我使用的是:
static
System.loadLibrary("jniortools");
Java 抛出这个异常
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniortools in java.library.path
我尝试根据this 问题将此添加到我的pom.xml
中,但这似乎不起作用。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>once</forkMode>
<workingDirectory>target</workingDirectory>
<argLine>-Djava.library.path=$basedir/src/main/resources/lib/jniortools.dll</argLine>
<environmentVariables>
<PATH>$basedir\..;$java.library.path</PATH>
</environmentVariables>
</configuration>
</plugin>
这就是我在外部 jar 中加载的方式
<dependency>
<groupId>com.google.ortools</groupId>
<artifactId>ortools</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>$basedir/lib/com.google.ortools.jar</systemPath>
</dependency>
我还能如何做到这一点?
【问题讨论】:
-Djava.library.path=$basedir/src/main/resources/lib/jniortools.dll
。我认为您需要传递路径,而不是文件。所以试试-Djava.library.path=$basedir/src/main/resources/lib/
我得到了与路径而不是文件相同的异常。
【参考方案1】:
我不确定这是否是解决问题的正确方法,但我遇到了加载 dll 的不同方法。
所以通过替换
System.loadLibrary("jniortools");
通过
File file = new File("src/main/resources/lib/jniortools.dll");
System.load(file.getAbsolutePath());
我能够加载 dll 并且不需要 maven-surefire-plugin。希望这对将来的任何人都有帮助。
【讨论】:
以上是关于使用 maven 将 dll 添加到 java.library.path的主要内容,如果未能解决你的问题,请参考以下文章