java打jar包和运行jar包的两种方式
java打jar包和运行jar包的两种方式
更详细的打包方式请参考https://www.cnblogs.com/mq0036/p/8566427.html
一、java类不依赖第三方jar包
以简单的一个java类Hello为例:
最终生成的jar包结构
META-INF
MENIFEST.MF
Hello.class
方法步骤
(1)用记事本写一个Hello.java的文件
class Hello{
public static void main(String[] agrs){
System.out.println("hello");
}
}
(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的文件,用记事本打开
Manifest-Version: 1.0
Created-By: 1.8.0_121 (Oracle Corporation)
在第三行的位置写入 Main-Class: Hello (注意冒号后面有一个空格,整个文件最后有一行空行),保存
再次运行 java -jar hello.jar ,此时成功在控制台看到 hello ,成功。
二、java类依赖第三方jar包
假设类Hello依赖jar包Tom.jar,最终生成的jar包结构还是:
META-INF
MENIFEST.MF
Hello.class
解释: Hello类与Tom.jar的调用关系如下:
class Hello{
public static void main(String[] agrs){
Tom.speak();
}
}
class Tom{
public static void speak(){
System.out.println("hello");
}
}
但是Tom类已经打成了jar包Tom.jar
方法步骤:
(1)编写一个Hello.java并将其编译成Hello.class,注意,由于Hello里面引用了Tom类的speak方法,因此在打jar包时应使用-cp参数,将tom.jar包引入
javac -cp tom.jar Hello.class
这里的 -cp 表示 -classpath,指的是把tom.jar加入classpath路径下
(2)将hello.class达成jar包
jar -cvf hello.jar Hello.class
(3)引入jar包需要在MENIFEST.MF文件中配置一个新属性:Class-Path,路径指向你需要的所有jar包
现在MENIFEST.MF这个文件应该变成:
Manifest-Version: 1.0
Created-By: 1.8.0_121 (Oracle Corporation)
Main-Class: Hello
Class-Path: Tom.jar
(4)使用java -cp Tom.jar;hello.jar hello来运行jar包
最新文章
- 《HiWind企业快速开发框架实战》(2)使用HiWind创建自己的项目
- iOS 关于手势
- 好用的排名函数~ROW_NUMBER(),RANK(),DENSE_RANK() 三兄弟
- C# Windows - 菜单栏和工具栏
- 从源码角度深入分析ant
- Java连接mySql—JDBC连接数据库
- java中的上转型对象
- 01.Editplus+Lua配置
- 【译】ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解
- h5 新增特性用法---持续更新
- Linux进程管理之task_struct结构体
- 【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)
- BEX5下新建任务到待办任务
- PYQT窗口可视化编程
- 如何理解php的依赖注入
- 爬虫——xpath
- 微信小程序UI组件--Lin UI
- mysql存储过程异常处理
- Python3编写网络爬虫04-爬取猫眼电影排行实例
- mysql系列三、mysql开启缓存、设置缓存大小、缓存过期机制