-1

我正在研究 Eclipse,我需要使用外部库。例如 Jsoup 和 JXL。

现在我到目前为止所做的是:首先在我的项目文件夹中创建了一个“lib”文件夹。然后在eclipse中,单击项目属性,库选项卡,添加外部jar并将jar添加到lib文件夹中。

所以这解决了我的编译问题。现在,当我运行程序时(我去 project/bin 并在控制台中执行: java ProgramName ;我得到

java.lang.NoClassDefFoundError: 

现在进行测试,我将 Jar 文件添加到 Main.java 所在的文件夹中,现在,我已经能够运行程序,执行以下操作:

javac -classpath ./path/to/jar Main.java
java -classpath ./path/to/jar:. Main  

这有效。

所以首先想到的是我必须告诉 java 在哪里可以找到相应的库。如果这是正确的?我该怎么做?

java -cp ???(dont know what to put here)

但更何况。我还有一个问题。我正在计算机上编写这个程序,但我将在其他可能没有这些库的地方使用它。我该如何解决这个问题?

4

3 回答 3

0

我喜欢使用类似以下的东西:

java -cp myjar.jar;lib/*.jar com.foo.bar.MyClass

这不仅将我的 jar 添加到类路径中,还添加了lib目录中的 jar。

如果你想在另一台计算机上运行你的 jar,你需要这些 jar,你不能只拥有你的 jar。为什么不直接打包你的 lib 目录呢?

于 2013-04-23T16:14:32.260 回答
0

要让您的程序运行,您需要担心两条路径

  1. jar 文件的路径,这些文件是您的应用程序依赖项(如 jsoup.jar)(我们称之为 lib)
  2. 包含应用程序类的目录的路径(让我们调用这些类)

您需要的命令行的一般形式是:

java -cp lib/jsoup.jar:classes Main

如果你有更多的库

java -cp lib/jsoup.jar:lib/jxl.jar:classes Main

关于打包您的应用程序以发布到其他计算机的一般说明。您可能要考虑制作自己的应用程序的 jar,最好使用http://ant.apache.org/manual/Tasks/jar.html

另一种选择是制作一个“一个罐子”,它制作一个大罐子,捆绑在你的库中需要的所有类和应用程序中的所有类中。然后,您可以使 jar 可执行,以获得良好的开箱即用解决方案。看看http://one-jar.sourceforge.net/https://code.google.com/p/jarjar/

于 2013-04-23T16:17:45.793 回答
0

如果你有这个结构:

project folder
... code
... libs

然后从代码文件夹中:

javac -cp .;../libs/*.jar yourmainclass.java
java -cp  .;../libs/*.jar yourmainclass

当你需要编译和运行这个项目时,把所有的文件夹拿走,在其他机器上做同样的事情。

于 2013-04-23T16:18:38.560 回答