如何运行JAR文件


207

我创建了这样的JAR文件:

jar cf Predit.jar *.*

我通过双击运行了这个JAR文件(它不起作用)。因此,我从DOS提示符运行了它,如下所示:

java -jar Predit.jar

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

jar -xf Predit.jar

我运行了类文件:

java Predit

运行良好。我不知道为什么JAR文件不起作用。请告诉我运行JAR文件的步骤

Answers:


207

您需要在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

1
如果Test类通过jar文件引用了另一个类,那么要进行哪些修改?
Anand 2012年

@Anand然后,您需要在清单中包括Class-Path行,并引用其他jar。 docs.oracle.com/javase/tutorial/deployment/jar/downman.html

请帮我在这个问题上:stackoverflow.com/questions/24740803/...
萨贾德

我认为没有Manifest-version:1.0是不必要的,因为给定清单文件的内容将附加到已经具有docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii

2
这只是端到端示例。完美简单酥脆。我一直在找这样的东西几个小时。在搜索如何创建“ Hello world” java jar时,不知道为什么没有这样简单的示例,整个Internet到处都是垃圾。非常感谢。
Atul

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

如果此jar使用其他jar,那么classpath不应像“ / path / to / jars / *”吗?
Maxim Chetrusca,2015年

5
@Max Chetrusca是的,但是隔板:使用*不会起作用,因为你的shell将扩大这样说:"/path/to/jars/a.jar" "/path/to/jars/b.jar"但你真正想要的是:"/path/to/jars/a.jar:/path/to/jars/b.jar"
林奇

29

在运行jar之前Main-Class: classnameMANIFEST.MF文件中的检查是否可用。MANIFEST.MF存在于jar中。

java -jar filename.jar

16

您必须将一个清单添加到jar中,以告知Java运行时主类是什么。创建具有以下内容的文件“ Manifest.mf”:

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

将“ your.programs.MainClass”更改为实际的主类。现在,将文件放入名为“ META-INF”的子文件夹中的Jar文件中。您可以为此使用任何ZIP实用程序。


1
出于好奇,“ Meta-inf”子文件夹名称是否区分大小写?我历来看到它拼写为“META-INF”
亚当潘德

你是对的。细则中指出“META-INF”,而不会说的不区分大小写任何东西(java.sun.com/j2se/1.4.2/docs/guide/jar/...
弗洛里安FANKHAUSER

12

创建.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的选项e指定Main-Class入口点),还可以为您创建一个相应的清单文件。请参阅jar的官方文档
彼得·博德纳(PetrBodnár)

11

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

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

这将在jar文件中设置要运行的主类。


2
-classpath紧接着就java摆脱了-jar(即,这个答案是错误的)
皮特


3

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


3

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


3

我有这个文件夹结构:

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

还有另外两个软件包:

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点之前包括上述其他两个软件包


-2

要运行jar,首先必须创建

可执行罐

然后

java -jar xyz.jar

命令会起作用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.