使用命令行创建Jar文件时出现问题

时间:2011-08-13 12:50:26

标签: java jar

我尝试使用命令行创建Jar文件。

我的清单文件:

Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class:Home

我的文件和文件位置:

位置: D:\Application 文件:

 images
     add.png
     home.png
     minus.png
 Database.java
 Home.java
 UiDesign.java
 Database.class
 Home.class// This is my main class
 UiDesign.class
 Manifest.txt
 mysql-connector-java-5.1.15-bin.jar

要创建jar文件我试过:

D:\Application>jar cmf Manifest.txt MyApp.jar *.class mysql-connector-java-5.1.15-bin.jar images

但是创建了jar文件。如果我单击该jar文件,错误消息显示如下,

  

无法加载Main-Class清单属性   d:\应用程序\ MyApp.jar

感谢所有....通过在清单文件中添加新行解决了我的问题....谢谢大家...

但现在我还有另一个问题......

D:\JavaApplication-13-8-2011\Application>jar cfm  MyApp.jar Manifest.txt *.class
 mysql-connector-java-5.1.15-bin.jar images

D:\JavaApplication-13-8-2011\Application>java -jar MyApp.jar
Connect to MySQl
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at Database.getDBConnection(Database.java:14)
        at UiDesign.<init>(UiDesign.java:58)
        at Home.main(Home.java:6)
java.lang.NullPointerException
        at Database.getBrand(Database.java:31)
        at UiDesign.<init>(UiDesign.java:59)
        at Home.main(Home.java:6)
Exception in thread "main" java.lang.NullPointerException
        at UiDesign.<init>(UiDesign.java:64)
        at Home.main(Home.java:6)

D:\JavaApplication-13-8-2011\Application>

我认为这个问题是由于类路径没有设置为mysql-connector ....我在我的应用程序中添加了这个jar文件.....如何设置类路径并成功运行我的应用程序jar文件.. ...

请帮帮我....

谢谢......我清除了..这个问题也是......正如Trisstan所说,我在清单文件中添加了classpath ...现在我的应用程序Jar文件运行成功.....

谢谢大家的快速反应......

4 个答案:

答案 0 :(得分:2)

在清单文件的末尾添加换行符。

  

警告:文本文件必须以新行或回车结束。如果最后一行没有以新行或回车结束,则不会正确解析。

来自:http://download.oracle.com/javase/tutorial/deployment/jar/appman.html

答案 1 :(得分:1)

关于classpath可能是一个错误,因为你的jar依赖于mysql-connector-java-5.1.15-bin.jar

答案 2 :(得分:0)

确保清单文件中有回车符,我也猜测你的jar文件名应该在清单文件之前,因为你的选项是cfm。

Failed to Load Main-Class manifest attribute from D:\Application\MyApp.jar

从错误中看起来它认为jar文件是您的清单文件。那应该是问题所在。

更新参数或将选项参数更改为mcf我猜..

答案 3 :(得分:0)

第二个问题:

你的jar可能包含mysql jar的副本。这不起作用,因为jar应该包含类。解决此问题的最简单方法是在清单中indicate,代码依赖于mysql jar。基本上添加以下内容:

Class-Path: mysql-connector-java-5.1.15-bin.jar

在jar创建命令中,不要包含mysql jar。最后,确保你的jar和mysql一起分发(在同一目录中)。

如果你真的想要一个jar,请提取mysql jar并将其内容包含在你要发布的jar中。