Ошибка при запуске файла JAR - PullRequest
1 голос
/ 31 марта 2010

Я создал файл jar, который включает в себя мой .class, файл манифеста и файлы jar зависимостей, такие как

jar cfmv custadvicejar.jar mymanifest.txt  Gchreportsautomation Bean Utils 
jxl.jar ojdbc14.jar

где

  custadvicejar.jar - is my jar file name

  mymanifest.txt contains
  Main-Class: Gchreportsautomation.GCH_Home_Loan_Data_Cust_Advice_DAO

"Gchreportsautomation" - это имя пакета, содержащее "GCH_Home_Loan_Data_Cust_Advice_DAO.class" [Этот класс является моей отправной точкой моего приложения]

  Gchreportsautomation/ GCH_Home_Loan_Data_Cust_Advice_DAO.class

«Bean» - это имя пакета, содержащее «GCH_Home_Loan_Data_Cust_Advice_Bean.class»

  Bean/ GCH_Home_Loan_Data_Cust_Advice_Bean.class

«Utils» - имя пакета, содержащее «Utils.class»

  Utils/ Utils.class

и

  jxl.jar and ojdbc14.jar are jar files required for my application which i kept 
  in parent directory of the .class files like

D: \ Excalcreation

  /Gchreportsautomation/ GCH_Home_Loan_Data_Cust_Advice_DAO.class
  /Bean/ GCH_Home_Loan_Data_Cust_Advice_Bean.class
  /Utils/ Utils.class
  /jxl.jar
  /ojdbc.jar

во время работы приложения я получил ошибку типа

Caused by: java.lang.ClassNotFoundException: jxl.format.CellFormat

я знаю, что это из-за ошибки пути к классу. как это исправить.

Если я нажму на мой файл jar, приложение должно запуститься. пожалуйста, предоставьте решение.

Ответы [ 2 ]

0 голосов
/ 31 марта 2010

Если вы не возражаете против того, чтобы другие файлы jar были рядом, ваш манифест может указать, какие другие файлы jar должны быть в пути к классам при вызове файла jar. См:

http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html

Это может быть проще, чем включать файлы из банок в вашу банку.

Если вы добавите строку Class-Path: в вашу банку, которая указывает местоположение банок (я полагаю, относительно исполняемой банки), то вы должны быть установлены.

0 голосов
/ 31 марта 2010

Вы не можете включать банки в банки, не используя некоторые ClassLoader трюки для доступа к ним. Однако вы можете разархивировать внутренние банки и поместить содержащиеся в них файлы в основной. Есть инструменты, которые помогут вам в этом. См. Также: Classpath, включая JAR в JAR

Чтобы сделать это вручную, сделайте следующее:

jar -xf jxl.jar
jar -xf ojdbc14.jar
jxl-dirs=`jar -tf jxl.jar | sed -e 's/\/.*//' | sort | uniq | grep -v META-INF`
ojdbc14-dirs=`jar -tf ojdbc14.jar | sed -e 's/\/.*//' | sort | uniq | grep -v META-INF`
jar cfmv custadvicejar.jar mymanifest.txt  Gchreportsautomation Bean Utils $jxl-dirs $ojdbc14-dirs

где $jxl-dirs - это каталоги верхнего уровня, которые вы получили, запустив первые jar -xf jxl, а $ojdbc14-dirs - каталоги верхнего уровня, которые вы получили, запустив jar -xf ojdbc14.jar, исключив META-INF. (Это, однако, не сработает, если любой из этих каталогов верхнего уровня содержит пробелы.)

...