我创建了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文件,则必须运行该应用程序。请提供解决方案。
答案 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),那么你应该设置。