Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
如果你有一个打包在 JAR 文件中的应用程序,则需要某种方法来指示 JAR 文件中的哪个类是应用程序的入口点。你可以使用清单中的 Main-Class 头提供此信息,该头具有以下一般形式:
Main-Class: classname
值 classname 是作为应用程序入口点的类的名称。
回想一下,入口点是一个具有签名 public static void main(String[] args) 的方法的类。
在清单中设置 Main-Class 头后,使用以下形式的 java 命令运行 JAR 文件:
java -jar JAR-name
执行 Main-Class 头中指定的类的 main 方法。
我们想在运行 JAR 文件时在包 MyPackage 中的类 MyClass 中执行 main 方法。
我们首先创建一个名为 Manifest.txt 的文本文件,其中包含以下内容:
Main-Class: MyPackage.MyClass
然后,我们通过输入以下命令创建名为 MyJar.jar 的 JAR 文件:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
这将创建一个带有以下内容的清单的 JAR 文件:
Manifest-Version: 1.0 Created-By: 1.7.0_06 (Oracle Corporation) Main-Class: MyPackage.MyClass
使用以下命令运行 JAR 文件时,MyClass 的 main 方法执行:
java -jar MyJar.jar
'e' 标志(对应 'entrypoint')创建或覆盖清单的 Main-Class 属性。它可以在创建或更新 JAR 文件时使用。使用它指定应用程序入口点,而无需编辑或创建清单文件。
例如,此命令创建 app.jar,其中清单中的 Main-Class 属性值设置为 MyApp:
jar cfe app.jar MyApp MyApp.class
你可以通过运行以下命令直接调用此应用程序:
java -jar app.jar
如果入口点类名称在包中,则可以使用“.” (点)字符作为分隔符。例如,如果 Main.class 位于名为 foo 的包中,则可以通过以下方式指定入口点:
jar cfe Main.jar foo.Main foo/Main.class