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

Eclipse导出的Runnable Jar无法找到外部库

朱修德
2023-03-14

我有一个带有两个外部库的Java项目。在Eclipse中一切都运行良好,当导出为可运行的JAR时没有错误。但是,当我使用java-jar myapplication.jar通过命令行运行项目时,会抛出臭名昭著的java.lang.UnsatisfiedLinkError:no in java.library.path

我尝试使用所有三个导出选项(提取、包、复制),但没有成功。

(使用eclipse)

共有1个答案

周博达
2023-03-14

为了使system.LoadLibrary()工作,库(在Windows上是一个DLL)必须位于您路径上的某个目录中,或者位于Java.library.PATH系统属性中列出的路径中(因此您可以像java-djava.library.PATH=/PATH/to/dir那样启动Java)。

此外,对于loadLibrary(),您可以指定库的基名称,而不在末尾使用.dll。因此,对于/path/to/something.dll,只需使用System.LoadLibrary(“something”)。

您还需要查看您得到的确切的UnsatisfiedLinkError。如果上面写着类似:

线程“main”java.lang.UnsatisfiedLinkError中的异常:java.library.PATH中没有foo那么它在您的路径或java.library.PATH中找不到foo库(foo.dll)。如果上面写着类似:

线程“main”Java.lang.UnsatisfiedLinkError:com.example.program.classname.foo()V那么库本身就有问题,也就是说Java无法将应用程序中的本机Java函数映射到其实际的本机对应函数。

首先,我将在您的System.LoadLibrary()调用周围放置一些日志记录,以查看它是否正确执行。如果它抛出异常或者不在实际执行的代码路径中,那么您将始终得到上面解释的后一种类型的UnsatisfiedLinkError。

作为一个旁白,大多数人将他们的loadLibrary()调用放入具有本机方法的类中的静态初始化器块中,以确保它总是精确地执行一次:

 类似资料:
  • 我试图为我的老师制作我的eclipse项目的这个.exe文件,但是每次我这样做都会给我错误,声称lwjgl库不在里面。然而,当我从eclipse导出用于创建.exe的可运行jar时,我选择了“Package required libraries into generated jar”。我尝试通过命令提示符运行.jar,但它给出了以下错误(单击链接):https://scontent-dfw.xx.

  • 我在Eclipse中创建了一个新项目,我想在其中使用JTS库。我在创建项目期间导入了库,但在包资源管理器中找不到类。 由于我对Java和Eclipse没有经验,我将从一开始就解释我做了什么。 > 我从GitHub下载JTS库:https://github.com/locationtech/jts 我在命令行中使用创建jts-core.jar。我把它放在工作区/库中 在Eclipse中,我在work

  • 我有一个Maven项目,在那里我导入了一个外部JAR(通过构建路径),它位于参考库文件夹下。我如何在我的系统中导入它。java类文件?我的意思是字面上的代码“导入??”。这个班是在com上的。实例演示包。我是否需要在某个地方添加依赖项(pom.xml)?

  • 问题内容: 我在Eclipse中有一个Maven项目。我的项目用于自动化测试。因此,在我的pom.xml中,我添加了所有依赖项。 例如:Testng,Cucumber,Selenium-java等。 我已经安装了Jenkins,并使用Jenkins配置了自动化项目,以便在与Jenkins执行时,将执行该项目。 我已经将所有依赖项添加到pom.xml中,因此没有任何问题。但是现在,当我在Eclips

  • 我的应用程序正在尝试外部化所有项目属性,一些属性将位于我的应用程序中,而另一个属性将位于 Windows 中某处的文件夹中。 我将Spring设置为这样执行:-Spring . config . location = file:///C:\ Temp \ config \ application . properties,class path:application . properties 如您

  • 我点击一个文件,选择->Export->runnable JAR文件。问题是有些项目(和类)没有出现在“启动配置”中,即使它们包含一个主类,这意味着我不能导出它们。我该怎么办?