java - 使用 FatJar 作为 native 库

标签 java jar shared-libraries onejar

我正在使用 FatJar 创建一个包含 postgresql.jar、jdatepicker.jar 和 native 库的 jar。我已将项目合并到一个 jar 中。没有 postgresql 和 jdatepicker jar 错误。我可以以编程方式加载我的 native 库。但我无法加载依赖库。当我将库放入C:\Windows\System32时,没有加载依赖库错误。但我想从jar加载依赖库。我解压了 fatjar,可以看到依赖库。但我无法从 jar 加载。我该如何做到这一点?

编辑:

这是我的错误输出:enter image description here

这是我的类路径:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre7">
        <attributes>
            <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="JavaWinForms"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="jdatepicker-1.3.4.jar"/>
    <classpathentry kind="lib" path="postgresql-9.4-1201.jdbc41.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

我的本​​机库位于/project/lib 文件夹中。

最佳答案

为了过于简单化,您可以将 Java 应用程序的依赖关系视为两个独立的事物:

  1. 类路径。这包括您的类以及您正在使用的任何库的 jar。
  2. native 库路径。这包括用于 native 代码的资源。

看起来您正确设置了第一个,但第二个设置不正确。

如果没有 One-JAR,您需要使用 java.library.path 命令行参数指定 native 库路径。尝试在运行 jar 时指定这一点。

如果可行,那么您可以研究 One-JAR 如何处理 native 库。 This看起来是一个很好的起点。

Google 是您的 friend ,要了解更多信息,请尝试搜索“java native 库”、“java.library.path”或“onejar native 库”。

更多信息也可以在这些相关问题中找到:

How to bundle a native library and a JNI library inside a JAR?

What is LD_LIBRARY_PATH and how to use it?

无耻的 self 推销:你还可以使用我创建的一个名为 JarMatey 的工具。 ,这与 One-JAR 非常相似。

关于java - 使用 FatJar 作为 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31809315/

相关文章:

java - Fitness.API 在 Google Play Services 7.0 中被移除了吗?

java - 如何在Intellij中使用Gradle构建OpenFire插件?

java - 找不到错误 org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

c++ - 如何在 C++ 中正确创建/实现拦截器库?

android - 无法安装 Android 应用程序 - INSTALL_FAILED_MISSING_SHARED_LIBRARY

java - 计算小于 N 的以 2 为底的对数的最大整数

java - 如何使用字符串引用变量

java - 使用maven创建带有xml文件的jar文件

java - 无法访问可执行 Jar 中的资源

ruby - libpq.so.5 : cannot open shared object file: No such file or directory -/gds/apps/ruby-1. 9.2-p180/lib/ruby/gems/1.9.1/gems/pg-0.14.1/lib/pg_ext.so