如何运行JAR文件

时间:2020-02-23 14:34:39  来源:igfitidea点击:

今天,我们将学习如何在Java中运行JAR文件。

如何运行JAR文件

我们可以使用java命令运行jar文件,但是它需要jar列表文件中的Main-Class条目。

Main-Class是jar的入口点,由java命令用来执行该类。
我的项目结构如下图所示。

我必须在jar文件中添加列表文件,因此我将使用以下详细信息创建列表文件。

manifest.txt

Main-Class: com.theitroad.util.MyUtil

现在,我们将使用jar命令使用列表文件数据创建jar文件。

hyman@JD:~/CODE/MyProject/bin$jar cvfm MyProject.jar manifest.txt com
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/theitroad/(in = 0) (out= 0)(stored 0%)
adding: com/theitroad/test/(in = 0) (out= 0)(stored 0%)
adding: com/theitroad/test/MyTest.class(in = 444) (out= 303)(deflated 31%)
adding: com/theitroad/util/(in = 0) (out= 0)(stored 0%)
adding: com/theitroad/util/MyUtil.class(in = 444) (out= 304)(deflated 31%)

现在,当我打开包装并检查MANIFEST.MF文件的内容时,它包含以下数据。

Manifest-Version: 1.0
Created-By: 1.6.0_37 (Apple Inc.)
Main-Class: com.theitroad.util.MyUtil

Manifest-Version和Created-By条目由jar命令添加。
现在,我们准备通过命令行运行jar文件。

从命令行运行Jar文件

hyman@JD:~/CODE/MyProject/bin$java -jar MyProject.jar 
MyUtil main method

因此,它执行了MyUtil主方法。
当我们只有一个带有main方法的类时,这很棒。

如果我的项目有多个入口点,并且我想更改入口点而不再次创建jar,该怎么办。
因此,我们可以使用jar命令来更新列表文件。

要使用jar命令更新文件,文件结构应相似,否则它将新文件添加到另一个目录。
由于列表文件位于" META-INF/MANIFEST.MF"。
我们将manifest.txt重命名为MANIFEST.MF,并将其放入META-INF目录中。
然后运行以下命令更新入口点。

hyman@JD:~/CODE/MyProject/bin$jar uvfm MyProject.jar META-INF/MANIFEST.MF 
Jan 30, 2013 5:40:27 PM java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Main-Class.
Ensure that the manifest does not have duplicate entries, and
that blank lines separate individual sections in both your
manifest and in the META-INF/MANIFEST.MF entry in the jar file.
updated manifest

请注意,警告是因为条目重复,列表文件的每个元属性只能有一个条目,但是它仍然通过更新列表文件来更新入口点。
现在,当您运行jar时,它将执行更改后的条目类。

如果我们不想更改入口点但想从jar文件执行另一个类怎么办。
似乎令人困惑,但解决方案确实很简单。
您所需要做的就是将jar添加到类路径,然后像使用main方法的普通java类一样执行该类。

hyman@JD:~/CODE/MyProject/bin$java -cp MyProject.jar com.theitroad.util.MyUtil
MyUtil main method