3

我有一个程序我已经编写并变成了一个 jar 文件。jar 文件在我的计算机上运行良好。当我尝试在将要运行的服务器上运行程序时,jar 文件不起作用。我得到这个错误。

    Exception in thread "main" java.lang.NoClassDefFoundError: Publish
Caused by: java.lang.ClassNotFoundException: Publish
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Publish. Program will exit.

我认为这个问题是由不同版本的java或不同的环境引起的。我认为库不是这里的问题,而是运行该程序的环境。jar 文件在我自己的计算机上完美运行。

我的 java 版本 java 版本 "1.6.0_22" Java(TM) SE Runtime Environment (build 1.6.0_22-b04) Java HotSpot(TM) Client VM (build 17.1-b03, 混合模式, 共享)

服务器 java 版本 java 版本 "1.6.0_24" Java(TM) SE Runtime Environment (build 1.6.0_24-b07) Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, 混合模式)

我也收到此错误,这表明我可能有一个 32 位 java 而服务器有一个 64 位,这可能会导致问题。

VM 初始化期间发生错误无法为对象堆保留足够的空间

我只需分配一些内存来运行此进程即可轻松解决此错误。

有谁知道如何解决这个问题?

注意:我还查看了清单文件,看起来不错

4

2 回答 2

2

您正在使用Publish没有包。这意味着 java 期望这个类在默认包中。

您需要使用完全限定名称,例如:foo.bar.Publish

文档

默认情况下,第一个非选项参数是要调用的类的名称。应使用完全限定的类名。如果指定了 -jar 选项,则第一个非选项参数是包含应用程序的类和资源文件的 JAR 归档的名称,启动类由 Main-Class 清单头指示。

于 2012-07-25T18:38:46.813 回答
1

您需要包含完整的包名称。此错误不是 32/64 位操作系统的错误,也不是 Java 环境中的错误。

于 2012-07-25T18:40:01.697 回答