使用 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的主要内容,如果未能解决你的问题,请参考以下文章

如何将 dll 配置文件添加到添加 dll 作为参考的项目中?

将 C++ DLL 添加到 C# 项目

将非托管 C++ dll 添加到托管 C++ dll

为啥我应该将 NuGet 包 dll 添加到源代码管理?

Maven shade插件打包DLL

将 openCV .dll 文件添加到 Netbeans C++ Qt 应用程序