1

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)

私は何を間違っていますか?

4

1 に答える 1

1

引数を使用すると、-classpath引数 (およびCLASSPATH環境変数) は無視されます-jar

jar ファイルが他のライブラリに依存している場合、次の 2 つの選択肢があります。

  1. Class-Pathファイルのヘッダーを使用MANIFEST.MFして他の jar を呼び出すか、
  2. 他の jar を開梱し、それらを jar に含めます。
于 2012-06-26T14:51:30.230 に答える