如何运行JAR文件

我创建了一个JAR文件,如下所示:

jar cf Predit.jar *.*

我通过双击这个JAR文件来运行它(它没有工作)。所以我像这样在DOS提示符下运行它:

java -jar Predit.jar

它引发了“加载主类失败”异常。所以我提取了这个JAR文件:

jar -xf Predit.jar

然后运行类文件:

java Predit

它运行得很好。我不知道JAR文件为什么不能工作。请告诉我运行JAR文件的步骤

808244 次浏览

您需要在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
你必须向jar添加一个清单,它告诉java运行时主类是什么。 创建一个文件Manifest。Mf ',内容如下:

Manifest-Version: 1.0
Main-Class: your.programs.MainClass

改变“your.programs。MainClass'到你实际的主类。现在将文件放到jar文件中,在名为“META-INF”的子文件夹中。为此,您可以使用任何zip实用程序。

如果您不想处理这些细节,您还可以使用Eclipse或NetBeans中的导出jar助手。

如果您不想仅仅为了运行jar文件而创建清单,那么您可以在运行jar文件时直接从命令行引用main类。

java -jar Predit.jar -classpath your.package.name.Test

这将设置在jar文件中运行哪个主类。

java -classpath Predit.jar your.package.name.MainClass

要运行jar,首先你必须创建

可执行jar

然后

Java -jar xyz.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可运行JAR文件

创建一个Java项目- RunnableJAR

  • 如果使用了任何jar文件,则将它们添加到项目构建路径。
  • 在创建Runnable Jar文件时选择带有main()的类。 李enter image description here < / >

主类

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开发用户指南►参考资料►菜单和操作

我有这样的文件夹结构:

< p > D: \ JavaProjects \ OlivePressApp \ com \琳达\ olivepress \ Main.class D: \ JavaProjects \ OlivePressApp \ com \琳达\ olivepress \ \ OlivePress.class施压 D: \ JavaProjects \ OlivePressApp \ com \琳达\ olivepress \橄榄\ Kalamata.class D: \ JavaProjects \ OlivePressApp \ com \琳达\ olivepress \橄榄\ Ligurian.class D: \ JavaProjects \ OlivePressApp \ com \琳达\ olivepress \橄榄\ Olive.class < / p >

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)使用清单和主类入口点创建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之前,检查Main-Class: classname清单。曼氏金融文件中是否可用。清单。MF存在于罐子中。

java -jar filename.jar

一个非常简单的方法来创建.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

jar cvfe HelloWorld.jar HelloWorld *.class

运行jar文件

 java -jar HelloWorld.jar

java -cp HelloWorld.jar HelloWorld
  • 遵循这个答案,如果你有一个jar文件,并且你需要运行它
  • 有关解决大多数常见错误的提示,请参阅故障排除部分

简介

运行java应用程序有几种方法:

  1. java -jar myjar.jar -是运行应用程序的默认选项
  2. java -cp my-class-path my-main-classjava -classpath my-class-path my-main-class
  3. java --module-path my-module-path --module my-module/my-main-class
  4. 部署到企业服务器。当你有warear文件时。我们将省略对此的解释 李案< / >

在这个答案中,我将解释如何运行jar,如果你必须手动运行它,并给出解决常见问题的提示。

java -jar

从最常见的选项开始:使用-jar. xml文件运行jar文件。例子:

java -jar myjar.jar

如果失败:

  • with no main manifest attribute,则jar不可执行:
  • 与其他错误,然后参见“故障排除”;下面的部分

类路径或模块路径

如果-jar失败,那么jar应该使用类路径或模块路径运行。

当应用程序本身是模块化的时,使用Module-path。 JPMS——Java平台模块系统——是一种开发、分发和运行应用程序的现代方式。详情:< / em >

  1. 观看精彩模块化开发与JDK 9 by Alex Buckley
  2. awesome-java-module-system

运行一个罐子:

  1. 判断它是否是模块化的:
      <李>调用:
      jar --describe-module --file=path-to-jar-file
      
  2. <李>检查输出:
    1. 如果你在第一个行中看到No module descriptor found.,那么继续下面的类路径解决方案
    2. 如果你看到类似于:
    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[])方法的类名

例子:

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-namemy-main-class所在模块的名称
    • 通常my-module-namemodule-info.java文件中
  • my-main-class -具有static void main(String[])方法的类

如果使用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类文件格式的主要版本号列表?

__abc0, __abc1, __abc2

看到的:

  1. “提供dependencies"部分
  2. 为什么我在Java中得到一个NoClassDefFoundError ?< / >

提供依赖项

当应用程序运行时缺少或过期的依赖项时抛出ErrorException。 常见异常和错误:

  1. __abc0, __abc1, __abc2
  2. __abc0, __abc1, __abc2
  3. FindException

提供依赖项:

  1. 确定依赖项列表
    1. 通常是jar的列表,也可以是目录的列表,或者两者兼有
  2. 如果你运行的是Unix,则使用:加入列表,如果你运行的是Windows,则使用;
  3. 使用-classpath--module-path调用java

例子

  • 项目maven-multimodule-project-demo
  • I'm trying to run console-consumer.jar:
      <李>命令:
      java -classpath jars/console-consumer.jar org.diligentsnail.consoleconsumer.Main
      
    • jars/console-consumer.jar是我要运行的jar
    • org.diligentsnail.consoleconsumer.Main是带有main方法的类
  • 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
    
  • 缺失的依赖项是jars/hello-library.jar
  • <李>正确的命令:
    java -classpath jars/console-consumer.jar:jars/hello-library.jar org.diligentsnail.consoleconsumer.Main