Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行jar文件时出错_Java_Executable Jar - Fatal编程技术网

Java 运行jar文件时出错

Java 运行jar文件时出错,java,executable-jar,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_

我已经创建了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\u Home\u Loan\u Data\u Cust\u Advice\u DAO.class”的包名[该类是我应用程序的起点]

  Gchreportsautomation/ GCH_Home_Loan_Data_Cust_Advice_DAO.class
“Bean”是包含“GCH\u Home\u Loan\u Data\u Cust\u Advice\u Bean.class”的包名

“Utils”是包含“Utils.class”的包名

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文件,应用程序必须运行。请提供解决方案。

如果不使用一些
ClassLoader
技巧来访问jar,就不能在jar中包含jar。不过,您可以做的是取消内部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
得到的顶级目录。(但是,如果这些顶级目录中的任何一个包含空格,这将不起作用。)

如果您不介意周围有其他jar文件,则清单可以指定调用jar时类路径中应该包含哪些其他jar。见:

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


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

您能告诉我如何进行设置吗。我有急事。请尽快帮助。我的应用程序在MS WindowsXp中。如何使用grep命令。使用上述命令的最简单方法是安装cygwin,然后它们将在windows上工作。实际上,这些命令所做的是查找jar中的顶级目录(META-INF除外),这些目录名作为参数传递到jar命令中。是的。。。实际上,您并不需要包含grep的两行代码,您可以手工填写所需的信息:运行前两个命令,然后将最后一行中的命令的$variables替换为取消jxl.jar和ojdbc14.jar关联时得到的顶级目录。
  /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 -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