Java jar 文件在移动到另一个位置时不起作用



好的,所以...这是我的步骤。

我在桌面上有一个文件夹。让我们称它为桌面文件夹。在桌面文件夹中,我有 2 个文件夹。一个叫libs,一个叫src。库内部有两个 jar 依赖项。让我们称它们为 jar1 和 jar2。在src中,我有一个java文件。我们称之为我的程序.java所以我用 cmd 编译它们

javac -cp .;../libs/jar1;../libs/jar2; MyProgram.java

编译。现在,我在 src 文件夹中创建了一个清单.txt其中包含以下内容:

 Main-Class: MyProgram
    Class-Path: ../libs/jar1 ../libs/jar2
    <a new line>

然后在我的 cmd 中,我导航到我的 src 目录并执行以下操作:

jar -cvfm MyProgramJar.jar manifest.txt ./../libs MyProgram.class

这将编译一个名为MyProgramJar的jar文件这在我的 SRC 中找到(因为我将我的 CMD 目录导航到 SRC(当我运行可执行文件时,它可以工作。但是当我将MyProgramJar移到桌面之外时它说它找不到图书馆。为什么?我该如何解决它?

错误

本身就是 JNI 错误。

嗯,感谢@MadProgrammer(来自评论部分(。我了解到一个 jar 文件无法从内部访问另一个 jar 文件。放入清单中的类路径都是相对类路径。将 jar 文件移出后,它将无法找到程序所依赖的文件。有一些方法可以绕过它,比如Madprogrammer提到的"胖"罐子,它允许一个罐子从内部访问另一个罐子。

另一种方法是打开依赖项 jar 并简单地将文件移出它自己的 jar。这样,您的代码可以直接引用这些库。

我的一个私人朋友用日食来建造这个罐子。即使您在罐子中有一个罐子并且您移动罐子,这似乎也有效。我假设日食做了一些像"胖"罐子一样的事情。

相关内容

最新更新