【问题标题】:Accessing classes in an external Jar访问外部 Jar 中的类
【发布时间】:2010-03-06 17:36:38
【问题描述】:

我的 Java 程序无法查看打包在外部 jar 中的类。我在 Windows 7 下运行。我将类嵌入到一个名为 ParserUtilities.jar 的 jar 中。我使用系统实用程序和环境选项卡使用 CLASSPATH 变量建立了路径。 我确认 CLASSPATH 设置正确。当我输入 echo %CLASSPATH% 时,我看到 C:\Program Files\Java\externaljars\ParserUtilities.jar 这是正确的。但是当我输入 java -jar Parse.jar(我的可执行文件)我收到错误 线程“main”中的异常 java.lang.NoClassDefFoundError: com/artificialmed/Initialize

一些附加信息:

  1. 当我将 ParserUtilities.jar 放入 ..\lib\ext 目录时,一切正常。
  2. 我正在运行 java 版本 1.6.0_16。 Java(TM) SE 运行时环境
  3. 在实验中,我输入了 java -cp C:\Program Files\Java\jre6\lib\ext>java -cp C:\Program Files\Java\externaljars\ParserUtilities.jar

并收到此错误“找不到主类:Files\Java\externaljars\ParserUtilities.jar”,但没有主类(它只是我在一堆程序中使用的类的集合)。

我没有在环境中加载 Java SDK,只有一个 Java JRE(这是问题吗?)。

【问题讨论】:

  • 您使用的确切命令行是什么?我很困惑,因为您提到 ParserUtilities.jar 和 Parse.jar
  • Parse.jar 是一个包含应用程序的jar。它使用了一些打包在一个名为 ParserUtilities.jar 的 jar 中的辅助类。当我想运行应用程序时,我输入 java -jar Parse.jar。当 ParserUtilities.jar 位于 ..\lib\ext\ 文件夹中时,应用程序运行良好。但是当我将它移动到不同的目录时,即使 CLASSPATH 设置为该目录,我也会收到错误。

标签: java installation jar


【解决方案1】:

-jar 选项上的Sun's documentationjava 命令:“使用此选项时,JAR 文件是所有用户类的来源,其他用户类路径设置将被忽略。”我相信这意味着您的 CLASSPATH 环境变量以及您可能在命令行上提供的任何 -cp 参数都将被忽略。

因此,您有以下选择:

  1. 将所有内容打包到一个jar中,然后运行java -jar JarWithEverything.jar即可执行。
  2. 将内容保存在单独的 jar 中,并在命令行中将两个 jar 作为参数提供,以便您输入如下内容:

    java -cp "C:\Program Files\Java\externaljars\ParserUtilities.jar";"C:\Program Files\Java\externaljars\Parser.jar" com.artificialmed.Initialize

  3. 将内容保存在单独的 jar 中,并将一个或两个 jar 放入您的 CLASSPATH 环境变量中,而不是在命令行中提供它们。

【讨论】:

  • 好的。这为我指明了正确的方向。我通过从命令行键入 java -jar Parse.jar 来执行我的程序。如上所述,这不起作用。起作用的是建议 3,然后通过键入 java Parser(其中 Parser 是主类)来执行程序。换句话说,如果使用 CLASSPATH 变量,则不能使用 java -jar 选项调用主可执行文件。您只需要使用 java 。感谢我们的帮助。
【解决方案2】:

尝试在类路径条目周围添加“”,因为目录中有空间(程序文件)。错误消息“Files\Java\externaljars\ParserUtilities.jar”表明这是问题所在。

【讨论】:

  • 在执行 java -cp "C:Program Files\Java\externaljars\ParserUtilities.jar" 时在路径两边加上双引号会导致以下情况发生: 用法:java [-options] class [args. ...]等
  • windows环境的CLASSPATH变量加双引号
  • @Elliott:那是因为你需要在最后指定你的主类。
猜你喜欢
  • 1970-01-01
  • 2016-09-30
  • 2012-04-27
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
相关资源
最近更新 更多