【问题标题】:Issue with main when running jar file运行 jar 文件时出现 main 问题
【发布时间】:2014-04-22 17:57:17
【问题描述】:

我正在尝试运行一个 jar 文件,并且我已经在 eclipse 中创建了清单文件等,并指定了主入口点。我已经测试了我所有的类文件,而我需要工作的文件(TestRead.java)一直给我这个错误,不知道为什么或如何解决它:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/ws/commons/schema/XmlSchemaElement
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.ws.commons.schema.XmlSchemaElement
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 6 more

下面是命令行:

java -jar JavaWdslApp.jar

编辑:我将它保存为可运行的 Jar 文件并尝试运行它,但出现另一个问题,告诉我数组超出范围:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

我是这样称呼它的:

public static void main(String[] args) {
String path1 = args[0];
String fileName = args[1];
TagDef tagDef;

String[] operations;
try {
    operations = listOperationsUnique("abc");
    System.out.println("operation:" + operations.length);
    for (int i = 0; i < operations.length; i++) {
        System.out.println("operation:" + operations[i]);
    }
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SAXException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ParserConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

try {
    tagDef = refheader(path1, fileName); 

    System.out.println("=================================================================");
    System.out.println("abc");
    System.out.println(abc);
    System.out.println("=================================================================");

} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

}

【问题讨论】:

  • org.apache.ws.commons.schema.XmlSchemaElement 被打包在一个单独的 jar 中(我猜是 XmlSchema jar 什么的。检查一下。我不是 100%)我怀疑当你创建 your jar 你没有将它包含在你打包的 jar 中。因此,当您现在尝试运行它时,找不到它。
  • 好的,我已经查看了选项并将其保存为可运行的 Jar 文件,但我在 Main Args 中的数组显然超出了边界异常,代码在 Eclipse 中运行良好,我有一直在通过堆栈溢出寻找解决方案,但奇怪的是找不到值:String path1 = args[0];字符串文件名 = args[1];
  • @Studento919 您的参数异常是由试图引用 arg[1] 引起的。它是未定义的。按照托马斯的回答。如果你有任何问题,请报告。

标签: java eclipse jar executable-jar


【解决方案1】:

第二个错误是因为您试图访问 args[0] 和 args1,而您没有在命令行中通知任何参数。它应该看起来像这样:

java -jar JavaWdslApp.jar valueForPath1 valueForFileName

我建议您查看java command reference。

【讨论】:

  • 只是一个简单的问题,是否可以为我要传递的 txt 文件指定目标目录?
【解决方案2】:

问题在于您的 jar 包装。您创建的 jar 文件不包含所需的依赖项。请在创建 jar 文件时在文件中包含所需的库。那么你应该很高兴。

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多