我正在尝试使用
加载jar@echo off
java -jar Test.jar
pause
带有
的清单Manifest-Version: 1.0
Main-Class: classes.TestClass
在Jar目录中,当我提取它时,我可以清楚地看到一个classes \ TestClass文件。
修改:classes.TestClass
确实有public static void main(String[] args)
。
classes.TestClass
中的包减速为package classes;
但我仍然收到错误消息
Could not find or load main class classes.TestClass
我经历过这个问题所能找到的一切,但似乎没有任何帮助。
我已经尝试编辑类路径,重做清单,安装新的JRE。
我还应该做什么?
答案 0 :(得分:21)
我得到了这样的工作:
<强> 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 test.jar MANIFEST.MF classes/
然后将其作为
运行java -jar test.jar
答案 1 :(得分:16)
java -cp“full-path-of-your-jar”Main
在某个包中运行任何其他具有“public static void main”的类,
java -cp“full-path-of-your-jar”package1.package2.packages-hierarchy.ClassHavingMain
答案 2 :(得分:9)
1.创建一个文本文件calles Manifest.txt并提供值为
Main-Class:classes.TestClass
2.创建jar
jar cfm test.jar Manifest.txt classes / * .class
3.运行罐子
java -jar test.jar
答案 3 :(得分:4)
我最后遇到了同样的问题,因为我复制并粘贴了单词代码,这是一种稍微不同的' - '字符,这是我能想到的,当我手动输入它时工作
答案 4 :(得分:2)
如果没有完整的信息,这很难调试。
此时最容易看到的两个问题是jar中的文件没有存储在JAR中的目录中,或者它不是正确的文件。
你需要存储TestClass.class - 这个商店的一些新人是源文件TestClass.java。
您需要创建jar文件,以便TestClass.class出现类路径。确保它不是“/ classes”。使用zip查看文件并确保它有一个“类”的路径。
答案 5 :(得分:2)
我有一个类似的问题,我可以通过为jar文件所在的所有父文件夹(在Linux系统上)授予执行权限来解决。
示例:
/folder1/folder2/folder3/executable.jar
所有3个文件夹(folder1,folder2和folder3)以及executable.jar都需要当前用户的execute-privilege,否则返回错误“找不到或加载主类...”。
答案 6 :(得分:1)
此错误消息的可能原因:
<块引用>无法找到或加载主类
是当主类扩展(或实现)另一个不在类路径上的类(或接口)时。
答案 7 :(得分:1)
在IntelliJ中,尝试将主项目文件夹中的lib文件夹添加到工件时出现此错误。
放置并使用src文件夹中的lib文件夹即可。
答案 8 :(得分:1)
如果使用程序包名称,则不适用于包含点(Error: Could not find or load main class
)的文件夹。即使它成功编译并创建了jar文件。
相反,它需要完整的文件夹层次结构。
失败:
com.example.mypackage/
Main.java
作品:
com/
example/
mypackage/
Main.java
要在Linux上编译,请执行以下操作:
javac `find com/ -name '*.java'` \
&& jar cfe app.jar com.example.mypackage.Main `find com/ -name '*.class'`
答案 9 :(得分:1)
即使您在单词jar之前错误地错过了“-”,也会出现此错误
命令错误
java jar test.jar
更正命令
java -jar test.jar
答案 10 :(得分:1)
我知道这是一个古老的问题,但是最近我遇到了这个问题,没有一个答案对我有帮助。但是,科拉尔(Corral)对赖安·阿特金森(Ryan Atkinson)的回答的评论确实使我意识到了这个问题。
我所有的编译后的类文件都放在target/classes
中,在我的情况下这些文件不是软件包。我试图从我项目的根目录中使用jar cvfe App.jar target/classes App
打包它,因为我的App类位于默认的未命名包中。
这不起作用,因为新创建的App.jar
在目录App.class
中将具有类target/classes
。如果尝试使用java -jar App.jar
运行此jar,它将抱怨找不到App
类。这是因为App.jar
中的软件包与项目中的实际软件包不匹配。
可以通过使用target/classes
直接从jar cvfe App.jar . App
目录创建jar来解决。我认为这很麻烦。
简单的解决方案是使用-C
选项列出要添加的文件夹,而不是使用默认的列出文件夹的方式。因此,就我而言,正确的命令是java cvfe App.jar App -C target/classes .
。这样会将target/classes
目录中的所有文件直接添加到App.jar
的根目录中,从而解决了问题。
答案 11 :(得分:1)
当 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用于为程序提供长类路径的方法。
答案 12 :(得分:1)
我按照以下说明在Eclipse中创建可执行文件.jar。然后运行命令“java -jar .jar”来启动程序。
它负责创建mainfest并为您包含主类和库文件部分。
http://java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html
答案 13 :(得分:1)
至少我这样做的方式如下:
如果您有一个嵌套的src树(比如com.test.myclass.MyClass)并且您要从根目录进行编译,则需要执行以下操作:
1)当你创建jar时(通常把它放在脚本中): jar -cvfm my.jar com / test / myclass / manifest.txt com / test / myclass / MyClass.class
2)清单应该如下:
Mainfest-version:1.0 Main-Class:com.test.myclass.MyClass 类路径:。 my.jar
3)现在你可以从以下任何地方运行jar:
java -jar my.jar
希望这有助于某人
答案 14 :(得分:0)
通过FTP传输jar文件后,我收到了相同的错误消息,但忘记设置为二进制模式。
答案 15 :(得分:0)
我遇到此错误是因为我在MANIFEST.MF
中写了错误的Class-Path
答案 16 :(得分:0)
我收到此错误是因为我的主类位于 test 包中,并且正在使用IntelliJ创建工件。当我在创建工件时选中包含测试框后,它就解决了。
答案 17 :(得分:0)
通过 maven 打包时,有时可能会丢失 pom.xml 中 <build>
标记下的以下行。因为 src 文件夹包含您的 java 文件
<sourceDirectory>src</sourceDirectory>
答案 18 :(得分:-1)
我有一个incorret类路径库,并解决了相同的错误