原始命令打jar包
简述:
jar包(文件)就是 Java Archive File(Java档案[归档]文件),是 Java 的一种文件格式,可将多个文件组合成一个文件。一个JAR文件由一系列采用Zip压缩格式的文件构成,同时还有一张“清单(Manifest)”,对所有这些文件进行了描述。JDK提供的许多类,也是以jar包的形式提供的。
jar包用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。jar文件中有一个特定目录——META-INF,其中包含特殊的文件——MANIFEST.MF,用来定义扩展与档案打包相关数据信息,运行时向JVM提供应用程序的有关数据信息。
清单(Manifest)文件格式规则:
1.文件中的内容以键值对的形式出现,键值对之间采用”冒号和空格”进行分隔(注意:冒号后的空格必须有,不然格式有错误).
2.每行最多72个字符,换行继续必须以空格开头 。
3.Class-Path指定引用jar包的目录。调用多个jar时,每一个用空格(由一个或多个空格)隔开,不是逗号或分号,一行写不下(超过72个字符),从第二行开始,每行开头要至少一个空格。如:
Class-Path: lib/tools.jar lib/guava-r09.jar lib/guice-2.0.jar
lib/jakarta.commons.lang-2.2.jar
- 文件的最后必需要空行,而且必须顶格。
官网说明:https://docs.oracle.com/en/java/javase/18/docs/specs/jar/jar.html
jar 命令的一些说明:jar -h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| 用法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ... jar 创建类和资源的档案, 并且可以处理档案中的 单个类或资源或者从档案中还原单个类或资源。
示例: jar --create --file classes.jar Foo.class Bar.class jar --create --file classes.jar --manifest mymanifest -C foo/ . jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/ classes resources jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/ module-info.class jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes
要缩短或简化 jar 命令, 可以在单独的文本文件中指定参数, 并使用 @ 符号作为前缀将此文件传递给 jar 命令。
示例: jar --create --file my.jar @classes.list
主操作模式:
-c, --create 创建档案 -i, --generate-index=FILE 为指定的 jar 档案生成 索引信息 -t, --list 列出档案的目录 -u, --update 更新现有 jar 档案 -x, --extract 从档案中提取指定的 (或全部) 文件 -d, --describe-module 输出模块描述符或自动模块名称
在任意模式下有效的操作修饰符:
-C DIR 更改为指定的目录并包含 以下文件 -f, --file=FILE 档案文件名。省略时, 基于操作 使用 stdin 或 stdout --release VERSION 将下面的所有文件都放在 jar 的版本化目录中 (即 META-INF/versions/VERSION/) -v, --verbose 在标准输出中生成详细输出
在创建和更新模式下有效的操作修饰符:
-e, --main-class=CLASSNAME 捆绑到模块化或可执行 jar 档案的独立应用程序 的应用程序入口点 -m, --manifest=FILE 包含指定清单文件中的 清单信息 -M, --no-manifest 不为条目创建清单文件 --module-version=VERSION 创建模块化 jar 或更新 非模块化 jar 时的模块版本 --hash-modules=PATTERN 计算和记录模块的散列, 这些模块按指定模式匹配并直接或 间接依赖于所创建的模块化 jar 或 所更新的非模块化 jar -p, --module-path 模块被依赖对象的位置, 用于生成 散列
只在创建, 更新和生成索引模式下有效的操作修饰符:
-0, --no-compress 仅存储; 不使用 ZIP 压缩
其他选项:
-?, -h, --help[:compat] 提供此帮助,也可以选择性地提供兼容性帮助 --help-extra 提供额外选项的帮助 --version 输出程序版本
如果模块描述符 'module-info.class' 位于指定目录的 根目录中, 或者位于 jar 档案本身的根目录中, 则 该档案是一个模块化 jar。以下操作只在创建模块化 jar, 或更新现有的非模块化 jar 时有效: '--module-version', '--hash-modules' 和 '--module-path'。
如果为长选项提供了必需参数或可选参数, 则它们对于 任何对应的短选项也是必需或可选的。
|
测试
创建文件夹test-jar
在test-jar下创建lib文件夹并把fastjson-1.2.78.jar放到lib目录下。
创建User.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class User { String id;
public User(String id) { this.id = id; }
public String getId() { return id; }
public void setId(String id) { this.id = id; } }
|
创建Main.java
1 2 3 4 5 6 7 8 9
| import com.alibaba.fastjson.JSONObject;
public class Main {
public static void main(String[] args) { System.out.println(JSONObject.toJSONString(new User("testUser"))); }
}
|
java -c Main.java
Java -c User.java
新建一个文件myapplication.mf
1 2 3 4
| Manifest-Version: 1.0 Created-By: 11.0.15 (Azul Systems, Inc.) Main-Class: Main Class-Path: lib/fastjson-1.2.78.jar
|
新建一个文件夹out,并把Main.class、user.class和lib文件复制到out文件夹下
打包:
1 2
| cd test-jar/ jar --create --verbose --file test-jar.jar --manifest myapplication.mf -C ./out/ .
|
执行:
使用idea打包
英文:
File -> Project Structure -> artifacts -> + -> jar -> from modules ->选主类和第一个单选按钮 ->确定后会生成Manifest文件
生成:
菜单栏build -> build artifacts ->build
执行:
java -jar test-jar.jar
中文:
文件 -> 项目结构 -> 工件 -> + -> jar - > 来自具有依赖项的模块 -> 主类 + 提取到目标jar -> 确定后会生成Manifest文件
生成:
构建 -> 构建工件 -> 构建
使用maven打jar包
方法1:
1.在pom.xml中添加如下配置;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.5</version> <configuration> <archive> <manifest> <mainClass>EchoServer</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build>
|
2.点击maven project(右边栏)->选择Plugins->选择assembly->点击assembly:assembly
3.执行 java -jar test-netty-1.0-SNAPSHOT-jar-with-dependencies.jar
方法2:
1.在pom.xml中添加如下配置;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>EchoServer</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
|
- maven clean 并且 maven package
- java -jar test-netty-1.0-SNAPSHOT.jar