Aus*_*tin 41 java program-entry-point jar class
我正在尝试使用加载jar
@echo off
java -jar Test.jar
pause
Run Code Online (Sandbox Code Playgroud)
随着的表现
Manifest-Version: 1.0
Main-Class: classes.TestClass
Run Code Online (Sandbox Code Playgroud)
在Jar目录中,当我提取它时,我可以清楚地看到classes\TestClass文件.
编辑:classes.TestClass
确实有public static void main(String[] args)
.
包装减速度classes.TestClass
是package classes;
但我仍然收到错误消息
Could not find or load main class classes.TestClass
Run Code Online (Sandbox Code Playgroud)
我经历过这个问题所能找到的一切,但似乎没有任何帮助.
我已经尝试编辑类路径,重做清单,安装新的JRE.
我还应该做什么?
BeR*_*ive 23
我得到它像这样工作:
TestClass.Java
package classes;
public class TestClass {
public static void main(String[] args) {
System.out.println("Test");
}
}
Run Code Online (Sandbox Code Playgroud)
使用javac
命令行上产生TestClass.class
.放入TestClass.class
一个文件夹classes/
.
MANIFEST.MF
Manifest-Version: 1.0
Main-Class: classes.TestClass
Run Code Online (Sandbox Code Playgroud)
然后跑
jar cfm test.jar MANIFEST.MF classes/
Run Code Online (Sandbox Code Playgroud)
然后运行它
java -jar test.jar
Run Code Online (Sandbox Code Playgroud)
小智 16
java -cp"full-path-of-your-jar"主要
在某些包中运行任何其他具有"public static void main"的类,
java -cp"full-path-of-your-jar"package1.package2.packages-hierarchy.ClassHavingMain
1.创建一个文本文件calles Manifest.txt并提供值为
Main-Class:classes.TestClass
2.创建罐子
jar cfm test.jar Manifest.txt classes/*.class
把罐子弄得像
java -jar test.jar
小智 8
我知道这是一个老问题,但我最近遇到了这个问题,但没有一个答案对我有帮助。然而,Corral 对 Ryan Atkinson 回答的评论确实让我注意到了这个问题。
我的所有编译类文件target/classes
都在 . 我试图用jar cvfe App.jar target/classes App
, 从我的项目的根目录打包它,因为我的 App 类在默认的未命名包中。
这不起作用,因为新创建的App.jar
将App.class
在目录中包含类target/classes
。如果您尝试使用 运行此 jar java -jar App.jar
,它会抱怨找不到App
该类。这是因为里面App.jar
的包与项目中的实际包不匹配。
这可以通过直接从target/classes
目录创建 jar 来解决,使用jar cvfe App.jar . App
. 这在我看来是相当麻烦的。
简单的解决方案是-C
使用选项列出要添加的文件夹,而不是使用列出文件夹的默认方式。所以,就我而言,正确的命令是java cvfe App.jar App -C target/classes .
. 这样就直接把target/classes
目录下的所有文件都加到根目录下App.jar
,从而解决问题。