2017-06-21 72 views
0

好的,这是我的步骤。移动到另一个位置时Java jar文件不工作

我在桌面上有一个文件夹。让我们称之为DesktopFolder。在桌面文件夹中,我有2个文件夹。一个叫libs,一个叫src。内部库是两个jar依赖项。让我们称他们为jar1和jar2。在src里面,我有一个java文件。让称它为MyProgram.java 所以我编译它们在CMD与

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

,编译。 现在我创造我src文件夹内manifest.txt有以下几点:

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

然后在我的CMD,我浏览到我的src目录,然后执行:

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

这种编译称为一个jar文件MyProgramJar 这是在我的src里面找到的(因为我导航我的cmd目录到src) 当我运行可执行文件时,它可以工作。 但是,当我将MyProgramJar外部移动到桌面 它说它无法找到库。这是为什么?我该如何解决它?

错误本身就是JNI错误。

+0

您必须将整个文件夹移动到桌面,而不仅仅是'Jar'文件 –

+0

您是否也移动了lib目录? – MadProgrammer

+0

@JohnJoe我可以知道为什么整个文件夹要桌面? Jar文件具有依赖关系(当我右键单击打开为...上的jar文件,它有一个lib文件夹里面) –

回答

0

hmmmm。感谢@MadProgrammer(来自评论部分)。我了解到,jar文件无法从内部访问另一个jar文件。您放入清单中的类路径是所有相对的类路径。一旦将jar文件移动到外部,它将无法找到程序依赖的文件。像Madprogrammer中提到的“胖”罐一样,它有许多方法可以让罐子从内部访问另一个罐子。

另一种方法是打开依赖关系jar并将文件从它自己的jar中移出。这样,你的代码可以直接引用这些库。

我的一个私人朋友用eclipse来建立罐子。即使你在罐子里有一个罐子,并且你将罐子移动了,这似乎也能工作。我假设eclipse做了像“胖”罐子一样的东西。

相关问题