2012-10-23 76 views
22

我试图加载使用无法找到或加载主类的JAR文件

@echo off 
java -jar Test.jar 
pause 

一个罐子的

Manifest-Version: 1.0 
Main-Class: classes.TestClass 

在JAR目录中的清单,我可以清楚地看到一个类\ TestClass文件,当我提取它。

编辑:classes.TestClass确实有public static void main(String[] args)。在classes.TestClass

包减速是package classes;

但我仍然不断收到错误消息

Could not find or load main class classes.TestClass 

我经历过的一切,我已经能够找到这个问题,并且它都没有似乎有帮助。

我试过编辑classpath,重做清单,安装新的JRE。

我还应该做什么?

+1

TestClass是否包含主函数? – Baz

+1

@Baz是的,它有一个主要方法。 – Austin

+2

你确定'TestClass'的包名是'classes'吗? –

回答

7

1.创建一个文本文件卡列斯Manifest.txt和提供值作为

主类:classes.TestClass

2.创建罐作为

jar cfm test.jar Manifest.txt类/ *。类

3.Run罐子作为

Java的罐子Test.jar的

+0

你能告诉你的java路径和classpath集怎么样。在回复之前,您可以尝试一件事。尝试通过命令行而不是Eclipse运行相同的TestClass。 – Arham

+0

我可以使用命令行运行该类。与其他java命令一起,如javac。 – Austin

1

这是非常困难的不完整信息进行调试。

这两个最有可能的事情是,jar中的文件不存储在JAR中的目录中,或者它不是正确的文件。

您需要存储TestClass.class - 一些在此商店新增的人员源文件TestClass.java。

而且您需要创建jar文件,以便TestClass.class出现一个类的路径。确保它不是“/ classes”。使用zip查看文件并确保它具有“类”的路径。

13

我得到它的工作是这样的:

TestClass.Java

package classes; 

public class TestClass { 

    public static void main(String[] args) { 
     System.out.println("Test"); 
    } 

} 

使用javac在命令行上产生TestClass.class。将TestClass.class放入文件夹classes/

MANIFEST.MF

Manifest-Version: 1.0 
Main-Class: classes.TestClass 

然后运行

jar cfM MANIFEST.MF test.jar classes/ 

然后运行它作为

java -jar test.jar 
+3

我想回答一个隐含在答案中的问题:“没有jar文件的情况下,运行TestClass.class的类路径”时,将“cd”指向已使用的路径非常重要。例如,“cd/MyEclipseWorkspace/MyProject/bin”如果jar使用类文件的绝对路径,它可能会因“无法找到或加载主类”错误而失败。例如,这是错误的:jar cfm test.jar manifest.txt /absolutepath/classes/TestClass.class – Corral

+1

@ Corral的评论不应该被忽略。我一直在试图解决这个问题,直到我读了它,现在我的jar完美运行。 –

+0

'>%JAVAHOME%\ bin \ jar cfM MANIFEST.MF test.jar类/'结果在 'test.jar:没有这样的文件或目录'和'MANIFEST.JS'现在被破坏(它的二进制文件现在)。 –

2

我有同样的问题,到底它的,因为我复制并将代码粘贴到单词上,这是一种稍微不同的' - '字符使用ACTER,这就是所有我能想到的,当我在手动键入它,它的工作

11

java命令“全路径的 - 你 - 罐子”主

运行任何其他类有 “公共静态无效的主要” 在一些包,

java命令 “全路径的 - 你 - 罐子” package1.package2.packages-hierarchy.ClassHavingMain

+2

请在您降低评价时添加解释。 –

+1

如果你和你的jar在同一个目录下,你是否需要放完整路径? – Ungeheuer

+0

这真的解决了我的问题。我的manifest.md从来没有工作... –

1

在LEA ST我做这个的方式如下:

如果你有一个嵌套的src树(说com.test.myclass.MyClass),你从你需要做下面的根目录编译:

1)当您创建JAR(通常把这个脚本): 罐子-cvfm my.jar COM /测试/ MyClass的/ manifest.txt COM /测试/ MyClass的/ MyClass.class

2)清单应该看起来像:

Mainfest版本:1.0 Main-Class:com.test.myclass.MyClass Class-Pat H: 。 my.jar

3)现在你可以运行这样从任何地方的jar:

Java的罐子my.jar

希望这可以帮助别人

2

我有,我可以通过授予执行特权在其中的jar文件的位置(在Linux系统上)所有父文件夹解决了类似的问题。

实施例:

/folder1/folder2/folder3/executable.jar

所有3个文件夹(文件夹1,文件夹2和folder3)以及所述executable.jar无需执行特权为当前用户,否则返回错误“无法找到或加载主类...”。

0

我有一个奇怪的问题,当MANIFEST.MF中的一个不正确的条目导致加载失败。这是当我试图发起一项非常简单的Scala程序:

错误:

Main-Class: jarek.ResourceCache 
Class-Path: D:/lang/scala/lib/scala-library.jar 

正确:

Main-Class: jarek.ResourceCache 
Class-Path: file:///D:/lang/scala/lib/scala-library.jar 

用不正确的版本,我得到一个神秘的消息,同OP做到了。在解析清单文件时,可能应该说畸形的URL异常。

在清单文件中使用绝对路径是IntelliJ用于为程序提供长类路径的用途。

相关问题