【问题标题】:Error while running jar file运行jar文件时出错
【发布时间】:2011-02-02 23:45:33
【问题描述】:

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

【问题讨论】:

    标签: java executable-jar


    【解决方案1】:

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

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

    这可能比在你的 jar 中包含来自 jar 的文件更容易。

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

    【讨论】:

      【解决方案2】:

      如果不使用一些ClassLoader 技巧来访问它们,就不能在 jars 中包含 jars。不过,您可以做的是解压内部 jar 并将包含的文件放入主 jar 中。有一些工具可以帮助你。另见: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 获得的顶级目录,而忽略了META-INF。 (但是,如果这些顶级目录中的任何一个包含空格,这将不起作用。)

      【讨论】:

      • 你能告诉我怎么做吗?我急需。请尽快提供帮助。
      • 我的应用程序在 MS-WindowsXp 中我如何使用 grep 命令。
      • 使用上述命令的最简单方法是安装 cygwin,然后它们将在 windows 上运行。这些命令的真正作用是找到这些 jars 在其中的顶级目录(META-INF 除外),然后将这些目录名称作为参数传递给 jar 命令。
      • 是的...其实你并不需要包含 grep 的那两行,你可以手动填写所需的信息:运行前两个命令,然后 for the command in the最后一行将 $variables 替换为您在解压缩 jxl.jar 和 ojdbc14.jar 时获得的顶级目录。
      猜你喜欢
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 2012-10-20
      • 2014-10-22
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多