[英]How to run a JAR file
我创建了一个 JAR 文件,如下所示:
jar cf Predit.jar *.*
我通过双击运行这个 JAR 文件(它不起作用)。 所以我像这样从 DOS 提示符运行它:
java -jar Predit.jar
它引发了“无法加载主类”异常。 所以我提取了这个 JAR 文件:
jar -xf Predit.jar
我运行了 class 文件:
java Predit
它运作良好。 我不知道为什么 JAR 文件不起作用。 请告诉我运行 JAR 文件的步骤
您需要在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
java -classpath Predit.jar your.package.name.MainClass
在运行jar之前检查Main-Class: classname
在MANIFEST.MF文件中是否可用。 MANIFEST.MF存在于jar中。
java -jar filename.jar
您必须向jar添加一个清单,它告诉Java运行时主类是什么。 使用以下内容创建文件'Manifest.mf':
Manifest-Version: 1.0
Main-Class: your.programs.MainClass
将'your.programs.MainClass'更改为您的实际主类。 现在将文件放入Jar文件中,名为“META-INF”的子文件夹中。 您可以使用任何ZIP实用程序。
创建.class,.jar文件的一种非常简单的方法。
执行jar文件。 无需过多担心清单文件。 让它简单而优雅。
Java示例Hello World Program
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
要么
jar cvfe HelloWorld.jar HelloWorld *.class
运行jar文件
java -jar HelloWorld.jar
要么
java -cp HelloWorld.jar HelloWorld
如果您不想仅为运行jar文件创建清单,则可以在运行jar文件时直接从命令行引用main-class。
java -jar Predit.jar -classpath your.package.name.Test
这将设置要在jar文件中运行的主类。
Java的
class Hello{
public static void main(String [] args){
System.out.println("Hello Shahid");
}
}
MANIFEST.MF
Manifest-version: 1.0
Main-Class: Hello
在命令行上:
$ jar cfm HelloMss.jar manifest.mf Hello.class
$ java -jar HelloMss.jar
输出:
Hello Shahid
如果您不想处理这些细节,还可以使用Eclipse或NetBeans中的导出jar助手。
Eclipse Runnable JAR文件
创建一个Java项目 - RunnableJAR
主类
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中找到Short cut :
帮助►帮助目录►Java开发用户指南►参考►菜单和操作
我有这个文件夹结构:
D:\\ JavaProjects \\ OlivePressApp \\ com \\ lynda \\ olivepress \\ Main.class D:\\ JavaProjects \\ OlivePressApp \\ com \\ lynda \\ olivepress \\ press \\ OlivePress.class D:\\ JavaProjects \\ OlivePressApp \\ com \\ lynda \\ olivepress \\ olives \\ Kalamata .class D:\\ JavaProjects \\ OlivePressApp \\ com \\ lynda \\ olivepress \\ olives \\ Ligurian.class D:\\ JavaProjects \\ OlivePressApp \\ com \\ lynda \\ olivepress \\ olives \\ Olive.class
Main.class
在com.lynda.olivepress
包中
还有另外两个包:
com.lynda.olivepress.press
com.lynda.olivepress.olive
1)创建一个名为"Manifest.txt"
的文件,其中包含两行,第一行带有Main-Class和第二个空行。
Main-Class: com.lynda.olivepress.Main
D:\\ JavaProjects \\ OlivePressApp \\ Manifest.txt
2)使用Manifest和Main-Class入口点创建JAR
D:\\ JavaProjects \\ OlivePressApp> jar cfm OlivePressApp.jar Manifest.txt com/lynda/olivepress/Main.class com/lynda/olivepress/*
3)运行JAR
java -jar OlivePressApp.jar
注意: com/lynda/olivepress/*
表示包括上面提到的其他两个包,在第1点之前)
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
war
或ear
文件时。 我们将省略对这种情况的解释在这个答案中,我将解释如何运行jar
如果您必须手动运行它,并给出解决常见问题的提示。
java -jar
从最常用的选项开始:使用-jar
运行jar
文件。 例子:
java -jar myjar.jar
如果失败:
no main manifest attribute
,则jar
不可执行:
jar
,请参阅无法执行 jar-文件:“没有主要清单属性”如果-jar
失败,则应使用类路径或模块路径运行 jar。
当应用程序本身是模块化的时,使用模块路径。 JPMS - Java 平台模块系统 - 是一种开发、分发和运行应用程序的现代方式。 详情:
要运行 jar:
jar --describe-module --file=path-to-jar-file
No module descriptor found.
在第一行,然后继续下面的类路径解决方案 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
继续下面的module-path
解决方案另请参阅: jar 文件中的模块列表
尝试以下操作:
java -cp my-jar.jar my-main-class
-cp
与-classpath
相同my-jar.jar
是 jar 运行my-main-class
是带有static void main(String[])
方法的 class 的名称例子:
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
是jar
运行my-module-name
是my-main-class
所属模块的名称
my-module-name
在module-info.java
文件中my-main-class
- 带有static void main(String[])
方法的 class 如果它因FindException
失败:
Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.fxml not found, required by org.diligentsnail.javafxconsumer
my-jar.jar
依赖于另一个jar
。 例如,应用程序使用第三方库。 请参阅下面的“提供依赖项”UnsupportedClassVersionError
更新 java。 查看Java class 文件格式主要版本号列表?
NoClassDefFoundError
, NoSuchMethodError
, NoSuchFieldError
看:
当应用程序在缺少或过期依赖项的情况下运行时,将引发Error
或Exception
。 常见异常和错误:
NoClassDefFoundError
, NoSuchFieldError
, NoSuchMethodError
ClassNotFoundException
, NoSuchFieldException
, NoSuchMethodException
FindException
提供依赖项:
jar
的列表,或者可以是目录列表或两者兼而有之:
如果您正在运行 Unix ;
- 如果你在 Windows-classpath
或--module-path
调用 javaconsole-consumer.jar
:
java -classpath jars/console-consumer.jar org.diligentsnail.consoleconsumer.Main
jars/console-consumer.jar
是我正在尝试运行的jar
org.diligentsnail.consoleconsumer.Main
是带有 main 方法的 class 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
jars/hello-library.jar
java -classpath jars/console-consumer.jar:jars/hello-library.jar org.diligentsnail.consoleconsumer.Main
要运行jar,首先你必须创建
可执行jar
然后
java -jar xyz.jar
命令会起作用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.