【问题标题】:Java application does not work properly outside IDEJava 应用程序在 IDE 之外无法正常工作
【发布时间】:2012-10-23 13:03:54
【问题描述】:

当我使用 IntelliJ Idea 运行它时 - 它完全正确。当我从输出运行 app.jar 文件时 - 一切都很好,但是 supportLib.jar 支持的一项功能。使用时我得到java.lang.NoClassDefFoundError: sun/plugin/dom/exception/InvalidAccessException。 输出的结构是:

| D:\myprogram\

  |
  ---> app.jar 
  |
  ---> lib\  
        |
        ---> supportLib.jar
        ---> anotherSupportLib.jar

ClassPath 是:lib/supportLib.jar lib/anotherSupportLib.jar

【问题讨论】:

    标签: java intellij-idea shared-libraries


    【解决方案1】:

    sun.plugin.dom.exception.InvalidAccessException 驻留在$JRE_HOME/lib/plugin.jar 中,因此您需要将$JRE_HOME/lib/plugin.jar 添加到您的类路径中。我想 IntelliJ 会自动添加它,但它不会由 Java 运行时自动加载(与 rt.jar 不同)。


    根据来自 cmets 的反馈,应用程序应该这样启动:

    java -classpath "c:/Program Files/Java/jre7/lib/plugin.jar;app.jar;lib/supportLib1.jar;lib/supportLib2.jar;lib/supportLib3.jar" namespace.forms.MainForm
    

    【讨论】:

    • 输出 jar 中的 META-INF\MANIFEST.MF 没有 $JRE_HOME/lib/plugin.jar。我是这样添加的:$JRE_HOME/lib/plugin.jar lib/supportLib.jar lib/anotherSupportLib.jar,它没有帮助。我是否正确添加了这部分?
    • 不能在 Manifest 文件中使用变量 - Manifest 中的类路径是相对路径。您是否可以简单地尝试使用“java -classpath your_JRE_directory/lib/plugin.jar ...”运行您的应用程序,以确保这确实是问题所在?
    • 我使用 java -classpath c:/Program Files/Java/jre7/lib/plugin.jar .;app.jar;lib/supportLib1.jar;lib/supportLib2.jar;lib/supportLib3.jar namespace.forms.MainForm 运行我的应用程序并给出错误:无法找到或加载主类 Files.Java.jre7.lib.plugin.jar。没有$JRE_HOME/lib/plugin.jar 应用程序运行,但必要的功能不起作用。我做错了吗?
    • 路径中有空格 - 您需要引用它们。此外,您的类路径中有一个虚假的点 - 您不应该需要它。请查看我的更新答案。
    • 赚了!但是如何才能运行可执行 JAR 本身呢?它仍然有一个清单文件,格式为:Manifest-Version: 1.0 Class-Path: lib/supportLib1.jar lib/supportLib2.jar lib/supportLib3.jar Main-Class: namespace.forms.MainForm
    【解决方案2】:

    IDEA 通常会添加绝对路径:

     -classpath D:\myprogram\lib\supportLib.jar;D:\myprogram\lib\anotherSupportLib.jar
    

    尝试使用此合成器运行您的 jar。

    【讨论】:

    • 我试过java -classpath c:/Program Files/Java/jre7/lib/plugin.jar .;app.jar;lib/supportLib1.jar;lib/supportLib2.jar;lib/supportLib3.jar namespace.forms.MainForm。但是有问题的选项仍然不起作用...
    【解决方案3】:

    在 Windows 机器上,这需要使用分号 lib/supportLib.jar;lib/anotherSupportLib.jar

    【讨论】:

    • 应用程序已停止运行
    • 对不起!该应用程序使用java -classpath c:/Program Files/Java/jre7/lib/plugin.jar .;app.jar;lib/supportLib1.jar;lib/supportLib2.jar;lib/supportLib3.jar namespace.forms.MainForm 运行。但是有问题的选项仍然不起作用...
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多