以我的经验来看,Java 的众多优势之一在于它能够以整洁的软件包(称为 JAR 或 *Java 存档*)交付应用程序。 JAR 文件使用户可以轻松下载和启动他们想要尝试的应用程序,易于将该应用程序从一台计算机传输到另一台计算机(并且 Java 是跨平台的,因此可以鼓励自由共享),并且易于让新程序员了解 JAR 内部以了解 Java 应用程序的运行方式。
有很多方法可以创建 JAR 文件,包括 Maven 和 Gradle 等工具链解决方案,以及 IDE 中的一键式构建功能。 但是,也有一些独立的命令,例如 jarfast
、gjar
和普通的 jar
,它们对于快速简单的构建非常有用,并且可以演示 JAR 文件需要什么才能运行。
安装
在 Linux 上,您可能已经拥有 fastjar
、gjar
或 jar
命令,作为 OpenJDK 软件包或 GCJ (GCC-Java) 的一部分。 您可以通过键入不带参数的命令来测试是否安装了其中任何一个命令:
$ fastjar
Try 'fastjar --help' for more information.
$ gjar
jar: must specify one of -t, -c, -u, -x, or -i
jar: Try 'jar --help' for more information
$ jar
Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
Try `jar --help' for more information.
我安装了所有这些命令,但你只需要一个。 所有这些命令都能够构建 JAR。
在 Fedora 等现代 Linux 系统上,键入丢失的命令会导致您的操作系统提示您为您安装它。
或者,您可以从 AdoptOpenJDK.net 为 Linux、MacOS 和 Windows 安装 Java。
构建 JAR
首先,您需要一个 Java 应用程序来构建。
为了简单起见,在名为 hello.java 的文件中创建一个基本的“hello world”应用程序
class Main {
public static void main(String[] args) {
System.out.println("Hello Java World");
}}
这是一个简单的应用程序,它在一定程度上简化了管理外部依赖项的现实意义。 尽管如此,它足以开始了解创建 JAR 所需的基本概念。
接下来,创建一个清单文件。 清单文件描述了 JAR 的 Java 环境。 在这种情况下,最重要的信息是标识主类,以便执行 JAR 的 Java 运行时知道在哪里找到应用程序的入口点。
$ mdir META-INF
$ echo "Main-Class: Main" > META-INF/MANIFEST.MF
编译 Java 字节码
接下来,将您的 Java 文件编译成 Java 字节码。
$ javac hello.java
或者,您可以使用 GCC 的 Java 组件进行编译
$ gcj -C hello.java
无论哪种方式,这都会生成文件 Main.class
$ file Main.class
Main.class: compiled Java class data, version XX.Y
创建 JAR
您拥有创建 JAR 文件所需的所有组件。
我经常将 Java 源代码作为好奇用户的参考,但*必须*的是 META-INF
目录和类文件。
fastjar
命令使用类似于 tar
命令的语法。
$ fastjar cvf hello.jar META-INF Main.class
或者,您可以以大致相同的方式使用 gjar
,但 gjar
要求您显式指定您的清单文件
$ gjar cvf world.jar Main.class -m META-INF/MANIFEST.MF
或者您可以使用 jar
命令。 请注意,这个不需要清单文件,因为它会自动为您生成一个,但为了安全起见,我显式定义了主类
$ jar --create --file hello.jar --main-class=Main Main.class
测试您的应用程序
$ java -jar hello.jar
Hello Java World
轻松打包
像 fastjar
、gjar
和 jar
这样的实用程序可以帮助您手动或以编程方式构建 JAR 文件,而像 Maven 和 Gradle 这样的其他工具链则提供依赖项管理功能。 一个好的 IDE 可能会集成这些功能中的一个或多个。
无论您使用哪种解决方案,Java 都为分发您的应用程序代码提供了一个简单而统一的目标。
评论已关闭。