我创建了一个jar文件,其中包含所有已编译的内容。另外,我的ant构建脚本将所需的lib复制到子文件夹" libs“中。结构看起来像这样:
MyProgram.jar
libs/
因此,当我现在尝试运行我的程序时,我得到了以下错误:
java -cp ".:/home/user/java/MyProgram/jar/libs" -jar MyProgram.jar
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at database.PostgresQL.getConnection(PostgresQL.java:38)
at recommender.dao.Creative2IdxDAO.createCreatives2Idx(Creative2IdxDAO.java:19)
at main.Main.calculateCorrelationMatrix(Main.java:51)
at main.Main.main(Main.java:28)
java.lang.NullPointerException
at recommender.dao.Creative2IdxDAO.createCreatives2Idx(Creative2IdxDAO.java:25)
at main.Main.calculateCorrelationMatrix(Main.java:51)
at main.Main.main(Main.java:28)
这一切为什么要发生?
发布于 2013-04-11 00:06:03
使用-jar
选项时,将忽略-cp
选项。设置类路径的唯一方法是使用jar中的清单文件。
只使用-cp
选项,将jar文件添加到该选项中,然后显式地调用主类会更容易。
另外,假设/home/user/java/MyProgram/jar/libs
文件夹包含jar文件(与类文件相反),这将不起作用。您不能指定jar文件的文件夹,但必须在类路径中单独指定每个jar文件(如果有大量的jar文件,则值得编写一个简单的shell脚本来完成此操作)。
发布于 2015-10-21 19:31:14
对于快速、一次性的应用程序测试,您可以简单地将所需的依赖JAR文件符号链接到包含主应用程序JAR文件的目录中。
示例(对于使用Eclipse SWT库的应用程序app.jar
,在我的示例中,该库安装在/usr/share/java
中):
$ ln -s /usr/share/java/swt.jar .
$ java -jar app.jar
https://stackoverflow.com/questions/15930782
复制相似问题