📜  在 Linux 终端中创建和执行 .jar 文件

📅  最后修改于: 2022-05-13 01:55:00.712000             🧑  作者: Mango

在 Linux 终端中创建和执行 .jar 文件

JAR – Java档案。它就像一个 zip 文件,但用于Java类。它将Java的所有 .class 文件组合成一个 .jar 文件。它用于在单个操作中下载 HTTP 上的所有Java类。这些可以使用“jar”CLI 工具创建。它还有一个可选的 META-INF,它可以包含如下文件:

  • MANIFEST.MF –清单文件用于定义扩展和包相关数据。
  • INDEX.LIST –它包含应用程序或扩展中定义的包的位置信息。
  • x.SF –这是签名文件,其中“x”是基本文件名。
  • x.DSA –该文件存储相应签名文件的数字签名。
  • services/ -该目录存储所有服务提供者配置文件。

最常见和主要使用的文件是 MANIFEST.MF

要求

必须安装Java (JDK + JRE)。使用命令检查 –

Java --version
jar --version

创建 Jar 文件

让我们考虑 4 个类文件——Class1、Class2、Class3、Class4

Java
class Class2 {
    public static void cls2Method(){
        System.out.println(" Hello from Class2 ");
    }
}
  
class Class3 {
    public static void cls3Method(){
        System.out.println(" Hello from Class3 ");
    }
}
  
 class Class4 {
    public static void cls4Method(){
        System.out.println(" Hello from Class4 ");
    }
}
  
public class Class1 {
    public static void main(String[] args){
        System.out.println(" Hello from Class1 ");
  
        Class2.cls2Method();
        Class3.cls3Method();
        Class4.cls4Method();
  
    }
}


输出

Hello from Class1 
Hello from Class2 
Hello from Class3 
Hello from Class4 

让我们将它们移动到一个名为“allClasses.jar”的 jar 文件中。

运行命令:

要获得清晰的输出,请使用 –verbose

输出:



这将在文件夹中创建一个allClasses.jar文件。让我们彻底理解上面的命令。

  1. –create:创建jar文件的选项。我们可以执行更多操作,如提取、更新等。
  2. –verbose:它提供清晰明了的输出,并显示幕后发生的事情。
  3. –file 文件名:文件名是 jar 文件的名称。扩展名(.jar) 是可选的。
  4. 最后,我们指定要放入 jar 文件的整个文件列表。

此命令的简写将是 -

jar -cvf allClasses.jar *

注: * 代表当前文件夹中的所有文件。谨慎使用 *。

更新,

jar -uf allClasses.jar Class4.class

-u 用于 –update。

这将使用新的 Class4.class 更新 allClasses.jar 文件。

从详细输出中,很明显正在发生压缩,要绕过压缩或存档文件而不压缩,请使用选项–no-compress

或者

jar -cvf0 allClasses.jar *

输出:



执行 Jar 文件

jar 文件的执行相当简单。只需使用命令

java -jar allClasses.jar

如果这给出了一个错误 -在 allClasses.jar 中没有主清单属性

打开./META-INF/MANIFEST.MF文件并在其中添加一行。

在我们的例子中,类名将是“Class1”,因为它是我们的主类。

现在,文件将如下所示:-

Manifest-Version: 1.0
Created-By: Ubuntu
Main-Class: Class1

再次运行命令

java -jar allClasses.jar

输出:

Hello from Class1 
Hello from Class2 
Hello from Class3 
Hello from Class4 

注意:不要在 MANIFEST.MF 文件的行之间留任何空格,否则会显示意外错误

如果您仍然遇到错误并且无法找到错误,请使用以下解决方法 –

java -cp allClasses.jar Class1

其中 Class1 是主类的名称。

笔记:

提取使用命令 -

jar --extract --file allClasses.jar

或者

jar -xf allClasses.jar