用 fastjar 和 gjar 构建一个 JAR 文件
创始人
2024-03-02 08:22:40
0

fastjar、gjar 和 jar 等工具可以帮助你手动或以编程方式构建 JAR 文件,而其他工具链,如 Maven 和 Gradle 提供了依赖性管理的功能。

根据我的经验,Java 的许多优点之一是它能够以整齐方便的包(称为 JAR,或 Java 归档)来提供应用程序。JAR 文件使用户很容易下载并启动他们想尝试的应用,很容易将该应用从一台计算机转移到另一台计算机(而且 Java 是跨平台的,所以可以鼓励自由分享),而且对于新的程序员来说,查看 JAR 文件的内容,以找出使 Java 应用运行的原因是很容易理解的。

创建 JAR 文件的方法有很多,包括 Maven 和 Gradle 等工具链解决方案,以及 IDE 中的一键构建功能。然而,也有一些独立的命令,如 jarfastgjar 和普通的 jar,它们对于快速和简单的构建是很有用的,并且可以演示 JAR 文件运行所需要的东西。

安装

在 Linux 上,你可能已经有了 fastjargjar 或作为 OpenJDK 包或 GCJ(GCC-Java)的一部分的 jar 命令。你可以通过输入不带参数的命令来测试这些命令是否已经安装:

$ 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

轻松打包

fastjargjarjar 这样的工具可以帮助你手动或以编程方式构建 JAR 文件,而其他工具链如 Maven 和 Gradle 则提供了依赖性管理的功能。一个好的 IDE 可能会集成这些功能中的一个或多个。

无论你使用什么解决方案,Java 都为分发你的应用代码提供了一个简单而统一的目标。


via: https://opensource.com/article/21/8/fastjar

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

Edge.js发布:为AI...
Wasmer公司推出了Edge.js,这是一个基于WebAssem...
2026-03-26 01:38:53
AI编程助手飞算JavaA...
钛媒体App 1月27日消息,获中国信通院认证生成完整工程代码的A...
2026-01-27 10:49:28
学java要学linux吗...
嘿,朋友们!今天咱们来聊聊一个很多Java新手都会纠结的问题:学j...
2026-01-22 09:49:54
Java、Python等开...
IT之家 9 月 24 日消息,开源安全基金会(OpenSSF)昨...
2025-09-24 14:25:34
怎么用AI做短视频赚钱?小...
嘿,你是不是也刷到过那些爆火的短视频,心想:“这玩意儿咋这么赚钱?...
2025-06-06 22:12:18
JAVA集合知识整理
Java集合知识整理 HashMap相关 HashMap的底层数据...
2025-06-01 22:12:08

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...