在 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 文件中。
运行命令:
jar –create –file allClasses.jar Class1.class Class2.class Class3.class
要获得清晰的输出,请使用 –verbose
jar –create –verbose –file allClasses.jar Class1.class Class2.class Class3.class
输出:
这将在文件夹中创建一个allClasses.jar文件。让我们彻底理解上面的命令。
- –create:创建jar文件的选项。我们可以执行更多操作,如提取、更新等。
- –verbose:它提供清晰明了的输出,并显示幕后发生的事情。
- –file 文件名:文件名是 jar 文件的名称。扩展名(.jar) 是可选的。
- 最后,我们指定要放入 jar 文件的整个文件列表。
此命令的简写将是 -
jar -cvf allClasses.jar *
注: * 代表当前文件夹中的所有文件。谨慎使用 *。
更新,
jar -uf allClasses.jar Class4.class
-u 用于 –update。
这将使用新的 Class4.class 更新 allClasses.jar 文件。
从详细输出中,很明显正在发生压缩,要绕过压缩或存档文件而不压缩,请使用选项–no-compress 。
jar –create –verbose –no-compress –file allClasses.jar Class1.class Class2.class Class3.class
或者
jar -cvf0 allClasses.jar *
输出:
执行 Jar 文件
jar 文件的执行相当简单。只需使用命令
java -jar allClasses.jar
如果这给出了一个错误 -在 allClasses.jar 中没有主清单属性
打开./META-INF/MANIFEST.MF文件并在其中添加一行。
Main-Class: classname
在我们的例子中,类名将是“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