我有一个程序我已经编写并变成了一个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运行时环境(版本1.6.0_22-b04) Java HotSpot(TM)客户端VM(版本17.1-b03,混合模式,共享)
服务器java版 java版“1.6.0_24” Java(TM)SE运行时环境(版本1.6.0_24-b07) Java HotSpot(TM)64位服务器VM(版本19.1-b02,混合模式)
我也得到了这个错误,这表明我可能有一个32位的java,而服务器有64位,这可能会导致问题。
VM初始化期间发生错误 无法为对象堆保留足够的空间
通过分配一些内存来运行此过程,我轻松解决了这个错误。
有没有人知道如何解决这个问题?
注意:我也查看了清单文件,看起来很好
答案 0 :(得分:2)
您正在使用Publish
没有包裹。这意味着java期望这个类在默认包中。
您需要使用完全限定名称,例如:foo.bar.Publish
默认情况下,第一个非选项参数是类的名称 被调用。应使用完全限定的类名。如果-jar 选项被指定,第一个非选项争论是一个名称 包含应用程序的类和资源文件的JAR存档, 使用Main-Class清单标题指示的启动类。
答案 1 :(得分:1)
您需要包含完整的包名称。此错误不是32/64位操作系统的错误,也不是Java环境中的错误。