运行jar文件时出错

时间:2010-03-31 15:12:24

标签: java executable-jar

我创建了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 :(得分:0)

如果不提取一些ClassLoader技巧来访问它们,您就不能在罐子中包含罐子。您可以做的是将内部罐子解开并将包含的文件放入主罐子中。有一些工具可以帮助您。另见:Classpath including JAR within a 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而忽略的顶级目录{ {1}}。 (但是,如果这些顶级目录中的任何一个包含空格,则无效。)

答案 1 :(得分:0)

如果你不介意拥有其他jar文件,你的清单可以在调用jar时指定类路径中应该有哪些其他jar文件。参见:

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

这可能比包含jar中jar文件的文件更容易。

如果你在jar中添加一个Class-Path:行来指定jar的位置(我相信相对于runnable jar),那么你应该设置。