我在 D:\ jarConcepts 目录中有一个简单的Demo.java文件:
import javax.swing.* ;
class Demo{
public static void main(String args[]){
JFrame frame = new JFrame("") ;
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) ;
Class c = null ;
try{
c = Class.forName("com.mysql.jdbc.Driver") ;
//com.mysql.jdbc.Driver class is in a jar file
//whose class path is set in the environment variable(explicitly done by me)
//when i am executing Demo.class using java command, it displays frame with OK title
//but if i execute this by creating a jar, it enables to load the
//com.mysql.jdbc.Driver class,
//thus displaying frame with Sorry title
frame.setTitle("OK") ;
}
catch(ClassNotFoundException cnfe){
frame.setTitle("Sorry") ;
}
frame.setVisible(true) ;
}
}
我在D:\ jarConcepts中准备了一个manifest.txt文件,其中包含以下文字:
主要课程:演示
Class-Path:C:\ Program Files \ MySQL \ MySQL Tools for 5.0 \ java \ lib \ mysql-connector-java-5.0.4-bin.jar
当我使用
从同一目录创建一个jar文件时jar -cvfm Demo.jar manifest.txt .class
以下是输出:
添加了清单 添加:Demo.class(in = 743)(out = 505)(缩小32%)
但是,当我执行生成的jar文件时,会显示错误消息,
无法找到主类。程序将退出。
我不明白为什么会发生这种情况,因为当我使用以下清单代码创建jar文件时:
主要课程:演示
我得到一个完全可执行的Demo.jar,唯一的问题是它没有加载来自]的Driver类 类路径,当我试图在清单中添加路径时,它不起作用...... 请帮助.......
答案 0 :(得分:1)
空格被解释为分隔符,条目应该是相对的:
http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Main%20Attributes
Class-Path:
此属性的值指定 相对网址 的 这个扩展或库 申请或延期需求。网址 由一个或多个空格分隔 。
答案 1 :(得分:0)
确保Main-Class和Class-Path条目之间的清单文件中没有换行符。您还应该确保在Class-Path条目之后有换行符。
如果要将Demo用作主要类,我也会建议将该演示作为公共课。
答案 2 :(得分:0)
您不应该依赖清单类路径,因为清单文件有一些非常strange rules,包括用于换行的文件。
相反,使用命令行参数构建一个类路径,并使用主类参数java -cp Demo.jar:mysql-connector.jar Demo