将jar添加到您的程序中

时间:2009-06-06 21:58:03

标签: java executable-jar

我在 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类 类路径,当我试图在清单中添加路径时,它不起作用...... 请帮助.......

3 个答案:

答案 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

调用您的程序