java 打印.jar_java打jar包的几种方式详解

经常会头疼于一个jar包是如何制作的,包括maven的打包方式,springboot的打jar包的原理,jar包稍稍有错误就会完全无法运行。在网上折腾了很久终于有些思路和步骤,在这里做个笔记

本文目录:

正文:

一、制作只含有字节码文件的jar包

我们先来看只含有字节码文件,即只含有class文件的jar包怎么制作,这是最简单的形式

1、最简单的jar包——直接输出hello

最终生成的jar包结构

META-INFHello.class

方法步骤

(1)用记事本写一个Hello.java的文件

1 classHello{2 public static voidmain(String[] agrs){3 System.out.println("hello");4 }5 }

(2)用命令行进入到该目录下,编译这个文件

javac Hello.java

(3)将编译后的Hello.class文件打成jar包

jar -cvf hello.jar Hello.class

c表示要创建一个新的jar包,v表示创建的过程中在控制台输出创建过程的一些信息,f表示给生成的jar包命名

(4)运行jar包

java -jar hello.jar 这时会报如下错误 hello.jar中没有主清单属性

添加Main-Class属性

用压缩软件打开hello.jar,会发现里面多了一个META-INF文件夹,里面有一个MENIFEST.MF的文件,用记事本打开

1 Manifest-Version: 1.0

2 Created-By: 1.8.0_121 (Oracle Corporation)3

在第三行的位置写入 Main-Class: Hello (注意冒号后面有一个空格,整个文件最后有一行空行),保存

再次运行java -jar hello.jar,此时成功在控制台看到 hello,成功

2、含有两个类的jar包——通过调用输出hello

最终生成的jar包结构

META-INF

Tom.class

Hello.class

方法步骤

(1)用记事本写一个Hello.java和一个Tom.java的文件

目的是让Hello调用Tom的speak方法

1 class Hello{2 public static void main(String[] agrs){3 Tom.speak();4 }5 }

1 class Tom{2 public static void speak(){3 System.out.println("hello");4 }5 }

(2)编译:javac Hello.java

此时Hello.java和Tom.java同时被编译,因为Hello中调用了Tom,在编译Hello的过程中发现还需要编译Tom

(3)打jar包,这次我们换一种方式直接定义Main-Class。

1 Manifest-Version: 1.0

2 Created-By: 1.8.0_121 (Oracle Corporation)3 Main-Class: Hello4

事先准备好上述的MENIFEST.MF文件,并存放在META-INF文件夹下ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值