如何运行JAR文件

192 java jar

我创建了一个这样的JAR文件:

jar cf Predit.jar *.*
Run Code Online (Sandbox Code Playgroud)

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

java -jar Predit.jar
Run Code Online (Sandbox Code Playgroud)

它引发了"无法加载主类"异常.所以我解压缩了这个JAR文件:

jar -xf Predit.jar
Run Code Online (Sandbox Code Playgroud)

我运行了类文件:

java Predit
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 200

您需要在jar文件清单中指定Main-Class.

Oracle的教程包含一个完整的演示,但这是另一个从头开始的演示.你需要两个文件:

Test.java:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

MANIFEST.MF:

Manifest-version: 1.0
Main-Class: Test
Run Code Online (Sandbox Code Playgroud)

请注意,文本文件必须以新行或回车结束.如果最后一行没有以新行或回车结束,则不会正确解析.

然后运行:

javac Test.java
jar cfm test.jar manifest.mf Test.class
java -jar test.jar
Run Code Online (Sandbox Code Playgroud)

输出:

Hello world
Run Code Online (Sandbox Code Playgroud)

  • 这只是端到端示例。完美简单明快。我花了几个小时寻找这样的东西。当搜索如何创建“Hello world”java jar 时,不知道为什么整个互联网都充满了垃圾,没有这样一个简单的例子。非常感谢。 (3认同)

Lyn*_*nch 55

java -classpath Predit.jar your.package.name.MainClass
Run Code Online (Sandbox Code Playgroud)

  • @Max Chetrusca是但是分隔符是`:`使用`*`将不起作用,因为你的shell会像这样扩展它:`"/ path/to/jars/a.jar""/ path/to/jars/b. jar"`但你真正想要的是:`"/ path/to/jars/a.jar:/ path/to/jars/b.jar"`. (4认同)

KAR*_*N.A 25

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

java -jar filename.jar
Run Code Online (Sandbox Code Playgroud)


Flo*_*ser 16

您必须向jar添加一个清单,它告诉Java运行时主类是什么.使用以下内容创建文件'Manifest.mf':

Manifest-Version: 1.0
Main-Class: your.programs.MainClass
Run Code Online (Sandbox Code Playgroud)

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


nag*_*547 12

创建.class,.jar文件的一种非常简单的方法.

执行jar文件.无需过多担心清单文件.让它简单而优雅.

Java示例Hello World Program

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
Run Code Online (Sandbox Code Playgroud)

编译类文件

javac HelloWorld.java
Run Code Online (Sandbox Code Playgroud)

创建jar文件

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class
Run Code Online (Sandbox Code Playgroud)

要么

jar cvfe HelloWorld.jar HelloWorld *.class
Run Code Online (Sandbox Code Playgroud)

运行jar文件

 java -jar HelloWorld.jar
Run Code Online (Sandbox Code Playgroud)

要么

java -cp HelloWorld.jar HelloWorld
Run Code Online (Sandbox Code Playgroud)


小智 11

如果您不想仅为运行jar文件创建清单,则可以在运行jar文件时直接从命令行引用main-class.

java -jar Predit.jar -classpath your.package.name.Test
Run Code Online (Sandbox Code Playgroud)

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

  • `-classpath`紧接在`java`之后,并且摆脱了`-jar`(即这个答案是不正确的) (2认同)