Java 为什么我的罐子不运转?

Java 为什么我的罐子不运转?,java,packaging,executable-jar,Java,Packaging,Executable Jar,我可以在jar文件之外运行我的程序,但我想部署它并将其作为jar运行 此命令用于运行.class文件: java -classpath .;./libs/mail.jar;./libs/jcommon-1.0.16.jar;./libs/jfreechart-1.0.13.jar;./libs/jxl.jar;./libs/ojdbc5.jar gdsreports/ReportsDriver 以下是我打包jar文件的方式: jar -cfvm GDSReports.jar GDSReport

我可以在jar文件之外运行我的程序,但我想部署它并将其作为jar运行

此命令用于运行.class文件:

java -classpath .;./libs/mail.jar;./libs/jcommon-1.0.16.jar;./libs/jfreechart-1.0.13.jar;./libs/jxl.jar;./libs/ojdbc5.jar gdsreports/ReportsDriver
以下是我打包jar文件的方式:

jar -cfvm GDSReports.jar GDSReports.mf gdsreports/* util/* libs/*
我的清单如下所示:

Manifest-Version: 1.0
Main-Class: gdsreports.ReportsDriver
Created-By: Me
这是我运行jar的方式:

java -classpath .;./libs/mail.jar;./libs/jcommon-1.0.16.jar;./libs/jfreechart-1.0.13.jar;./libs/jxl.jar;./libs/ojdbc5.jar;./util;./gdsreports -jar GDSReports.jar
但是,运行jar文件时,它无法加载所有库。这就是它所说的:

Error loading configuration file: config/reportConfig
Error loading configuration file: config/gdsIds
Exception in thread "main" java.lang.NoClassDefFoundError: jxl/write/WriteException
        at util.ReportConfig.setupReports(ReportConfig.java:197)
        at util.ReportConfig.setup(ReportConfig.java:65)
        at gdsreports.ReportsDriver.main(ReportsDriver.java:36)
Caused by: java.lang.ClassNotFoundException: jxl.write.WriteException
        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)
        ... 3 more
这是预期输出:

Error loading configuration file: config/reportConfig
Error loading configuration file: config/gdsIds
-------------------------------------
Running TimingReport with parameters:
        Filename: Reports/06-26-2012/TimingRptZL_06-26-2012.xls
        Brand: ZL
        Using production database: false
-------------------------------------
-------------------------------------
Exception in thread "main" java.lang.NullPointerException
        at gdsreports.TimingReport.fillChartData(TimingReport.java:417)
        at gdsreports.TimingReport.fillReport(TimingReport.java:238)
        at gdsreports.TimingReport.run(TimingReport.java:131)
        at gdsreports.ReportsDriver.main(ReportsDriver.java:40)

我做错了什么?

使用
-jar
参数时,忽略
-classpath
参数(以及
classpath
环境变量)

如果jar文件依赖于其他库,则有两种选择:

  • 使用
    MANIFEST.MF
    文件中的
    类路径
    头调用其他JAR,或者
  • 打开其他罐子的包装,把它们放进你的罐子里

  • 使用
    -jar
    参数时,
    -classpath
    参数(以及
    classpath
    环境变量)将被忽略

    如果jar文件依赖于其他库,则有两种选择:

  • 使用
    MANIFEST.MF
    文件中的
    类路径
    头调用其他JAR,或者
  • 打开其他罐子的包装,把它们放进你的罐子里

  • 那你做错了。在你的问题中添加一些细节来描述你的尝试。我需要使用类路径而不是类路径。将在计时器过期时接受。那么你做错了。在你的问题中添加一些细节来描述你的尝试。我需要使用类路径而不是类路径。将在计时器过期时接受。