使用Eclipse导出jar然后运行它

时间:2013-08-01 09:59:11

标签: java eclipse

我在Ubuntu 12.04上使用Eclipse 3.7。

我在src文件夹中的某个Eclipse项目中有五个.java文件。项目文件夹(除binlibsrc文件夹外),help文件和properties文件以及某些输入文件。< / p>

我需要使用java文件创建一个.jar文件,并使其可以从命令行执行,并将属性文件作为参数。

例如:

java -jar <jar-file-name>.jar -info file.properties

我使用Eclipse将项目作为.jar文件导出到bin文件夹中。

我将所有输入文件properties文件和help文件复制到dist文件夹中并运行命令。

我说错误

Failed to load Main-Class manifest attribute from jar

然后我检查了this回答并做了必要的(用一行创建了清单文件)并运行了

jar cfm <jar-file-name>.jar <manifest-file-name> ./bin/*.class

它不起作用,扔了一个ClassNotFoundException

任何帮助都将不胜感激。

修改

我在导出.jar时选择了'Next'而不是'Finish'来添加Main类。现在,在执行它时,它为mysql连接器jar抛出了一个“ClassNotFoundException”。尽管如此,它还包含在制作jar时添加的lib文件夹中。

Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

第二次编辑

相关产出。

java -cp ./lib/* -jar <non-runnable-jar>.jar -info info.properties

其中./lib/包含所有相关的jar。

它给出了这个错误:

Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at polygonprobability.Model.readTestingData(Model.java:178)
    at polygonprobability.Model.<init>(Model.java:136)
    at polygonprobability.Info.getModel(Main.java:290)
    at polygonprobability.Main.loadInfo(Main.java:138)
    at polygonprobability.Main.operInfo(Main.java:61)
    at polygonprobability.Main.distribute(Main.java:170)
    at polygonprobability.Main.parse(Main.java:81)
    at polygonprobability.Main.main(Main.java:34)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.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:188)
    at polygonprobability.DatabaseConnect.authorizeSQL(DatabaseConnect.java:50)
    at polygonprobability.Model.readTestingData(Model.java:157)
    ... 7 more

对于

java -cp /lib* -jar <non-runnable>.jar <packagename>.Main -info info.properties

它给出了这个错误

Exception in thread "main" java.lang.NoClassDefFoundError: /lib64
Caused by: java.lang.ClassNotFoundException: .lib64
    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)
Could not find the main class: /lib64. Program will exit.

2 个答案:

答案 0 :(得分:1)

尝试以下步骤 -

  1. 导出不可运行 jar ,不包含主类(跳过下一部分)
  2. 然后执行此操作java -cp /path/to/lib/*:yourjar.jar pkg.MainClass -info file.properties
  3. / path / to / lib / * =所有相关广口的路径。

答案 1 :(得分:0)

运行jar的命令行应该是

java -jar myJar.jar your.package.ClasswithMainMethod

如果提供错误,请包含它们。

我相信你可能特别想要

java -jar myJar.jar your.package.ClasswithMainMethod args

我找到运行该程序的最佳方法是从项目文件内部到dist文件夹上方一步,这样你就可以实际运行

java -jar ./dist/myJar.jar your.package.ClasswithMainMethod args 

当你重建Eclipse时,不会抱怨它无法删除dist文件夹

最后,如果由于某种原因你已经移动了你的lib路径,请尝试以下

java -cp /path/to/lib/*:myJar.jar your.package.ClasswithMainMethod args