我创建了一个JAR文件,如下所示:
jar cf Predit.jar *.*
我通过双击这个JAR文件来运行它(它没有工作)。所以我像这样在DOS提示符下运行它:
java -jar Predit.jar
它引发了“加载主类失败”异常。所以我提取了这个JAR文件:
jar -xf Predit.jar
然后运行类文件:
java Predit
它运行得很好。我不知道JAR文件为什么不能工作。请告诉我运行JAR文件的步骤
我创建了一个JAR文件,如下所示:
jar cf Predit.jar *.*
我通过双击这个JAR文件来运行它(它没有工作)。所以我像这样在DOS提示符下运行它:
java -jar Predit.jar
它引发了“加载主类失败”异常。所以我提取了这个JAR文件:
jar -xf Predit.jar
然后运行类文件:
java Predit
它运行得很好。我不知道JAR文件为什么不能工作。请告诉我运行JAR文件的步骤
当前回答
如果您有一个jar文件,并且需要运行它,请遵循这个答案 有关解决大多数常见错误的提示,请参阅故障排除部分
简介
运行java应用程序有几种方法:
Java -jar myjar.jar -是运行应用程序的默认选项 Java -cp my-class-path my-main-class或Java -classpath my-class-path my-main-class Java——module-path my-module-path——module my-module/my-main-class 部署到企业服务器。当你有战争或耳锉的时候。我们将省略对此的解释 情况下
在这个回答中,我将解释,如果你必须手动运行一个jar,如何运行它,并给出解决常见问题的提示。
java jar
从最常见的选项开始:使用-jar运行jar文件。例子:
java -jar myjar.jar
如果失败:
如果没有主manifest属性,那么jar是不可执行的: 如果你想做一个罐子 查看不能执行jar文件:“没有主manifest属性” 否则,继续使用下面的类路径或模块路径解决方案 ,然后参见下面的“故障排除”部分
类路径或模块路径
如果-jar失败,那么应该使用类路径或模块路径运行jar。
如果应用程序本身是模块化的,则使用Module-path。 JPMS——Java平台模块系统——是一种开发、分发和运行应用程序的现代方式。详情:
观看Alex Buckley编写的JDK 9模块化开发 看到awesome-java-module-system
运行一个罐子:
Determine if it's modular or not: Invoke: jar --describe-module --file=path-to-jar-file Examine output: If you see No module descriptor found. in the first line, then proceed with classpath solution below If you see something similar to: org.diligentsnail.consoleconsumer@1.0-SNAPSHOT jar:file:///home/caco3/IdeaProjects/maven-multi-module-project-demo/jars/console-consumer.jar!/module-info.class requires java.base mandated requires org.diligensnail.hellolibrary continue with module-path solution below
请参见:在jar文件中列出模块
类路径
试试下面的方法:
java -cp my-jar.jar my-main-class
-cp与-classpath相同 My-jar.jar是要运行的罐子 my-main-class是带有静态void main(String[])方法的类名
例子:
java -cp jars/console-consumer.jar org.diligentsnail.consoleconsumer.Main
模块路径
试试下面的命令:
java --module-path my-jar.jar --module my-module-name/my-main-class
My-jar.jar是要运行的罐子 My-module-name是my-main-class所属的模块名 通常my-module-name在module-info.java文件中 my-main-class -带有静态void main(String[])方法的类
如果FindException失败:
消息示例: 初始化引导层时发生错误 java.lang.module.FindException:模块javafx。未找到FXML, org.diligentsnail.javafxconsumer要求 通常,这意味着my-jar.jar依赖于另一个jar。 例如,应用程序使用第三方库。 参见下面的“提供依赖项”
故障排除
UnsupportedClassVersionError
更新java。请参阅Java类文件格式主要版本号列表?
奴隶路线,对吧
See:
“提供依赖项”部分 为什么我在Java中得到一个NoClassDefFoundError ?
提供依赖项
当应用程序运行时缺少或过期依赖项时,将抛出错误或异常。 常见异常和错误:
道上奴隶 对这部分的疯狂之旅 FindException
提供依赖项:
确定依赖项列表 通常它是一个jar列表,也可以是一个目录列表,或者两者兼有 如果您运行的是Unix,则使用:;-如果你在Windows上 使用-classpath或——module-path调用java
例子
Project maven-multimodule-project-demo I'm trying to run console-consumer.jar: Command: java -classpath jars/console-consumer.jar org.diligentsnail.consoleconsumer.Main jars/console-consumer.jar is the jar I'm trying to run org.diligentsnail.consoleconsumer.Main is the class with main method Error I get: Exception in thread "main" java.lang.NoClassDefFoundError: org/diligentsnail/hellolibrary/Hello at org.diligentsnail.consoleconsumer.Main.main(Main.java:11) Caused by: java.lang.ClassNotFoundException: org.diligentsnail.hellolibrary.Hello at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 1 more Missing dependency is jars/hello-library.jar Correct command: java -classpath jars/console-consumer.jar:jars/hello-library.jar org.diligentsnail.consoleconsumer.Main
其他回答
一个非常简单的方法来创建.class, .jar文件。
执行jar文件。不需要太担心清单文件。让它简单而优雅。
Java示例Hello World程序
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
编译类文件
javac HelloWorld.java
创建jar文件
jar cvfe HelloWorld.jar HelloWorld HelloWorld.class
or
jar cvfe HelloWorld.jar HelloWorld *.class
运行jar文件
java -jar HelloWorld.jar
Or
java -cp HelloWorld.jar HelloWorld
Eclipse可运行JAR文件
创建一个Java项目RunnableJAR
如果使用了任何jar文件,则将它们添加到项目构建路径。 在创建Runnable Jar文件时,选择带有main()的类。
主类
public class RunnableMainClass {
public static void main(String[] args) throws InterruptedException {
System.out.println("Name : "+args[0]);
System.out.println(" ID : "+args[1]);
}
}
使用java程序(cmd)通过提供参数运行Jar文件,并在eclipse控制台中获得输出和显示。
public class RunJar {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
String jarfile = "D:\\JarLocation\\myRunnable.jar";
String name = "Yash";
String id = "777";
try { // jarname arguments has to be saperated by spaces
Process process = Runtime.getRuntime().exec("cmd.exe start /C java -jar "+jarfile+" "+name+" "+id);
//.exec("cmd.exe /C start dir java -jar "+jarfile+" "+name+" "+id+" dir");
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream ()));
String line = null;
while ((line = br.readLine()) != null){
sb.append(line).append("\n");
}
System.out.println("Console OUTPUT : \n"+sb.toString());
process.destroy();
}catch (Exception e){
System.err.println(e.getMessage());
}
}
}
在Eclipse中查找快捷方式:
►帮助►帮助内容►Java开发用户指南►参考资料►菜单和操作
java -classpath Predit.jar your.package.name.MainClass
您需要在jar文件清单中指定一个Main-Class。
Oracle的教程包含一个完整的演示,但这里有另一个从头开始的演示。你需要两个文件:
Test.java:
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello world");
}
}
manifest . mf:
Manifest-version: 1.0
Main-Class: Test
注意,文本文件必须以新行或回车符结束。 如果最后一行不以。结尾,则不能正确解析 换行或回车。
然后运行:
javac Test.java
jar cfm test.jar manifest.mf Test.class
java -jar test.jar
输出:
Hello world
如果您不想处理这些细节,您还可以使用Eclipse或NetBeans中的导出jar助手。