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包

最新文章

  1. 《HiWind企业快速开发框架实战》(2)使用HiWind创建自己的项目
  2. iOS 关于手势
  3. 好用的排名函数~ROW_NUMBER(),RANK(),DENSE_RANK() 三兄弟
  4. C# Windows - 菜单栏和工具栏
  5. 从源码角度深入分析ant
  6. Java连接mySql—JDBC连接数据库
  7. java中的上转型对象
  8. 01.Editplus+Lua配置
  9. 【译】ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解
  10. h5 新增特性用法---持续更新
  11. Linux进程管理之task_struct结构体
  12. 【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)
  13. BEX5下新建任务到待办任务
  14. PYQT窗口可视化编程
  15. 如何理解php的依赖注入
  16. 爬虫——xpath
  17. 微信小程序UI组件--Lin UI
  18. mysql存储过程异常处理
  19. Python3编写网络爬虫04-爬取猫眼电影排行实例
  20. mysql系列三、mysql开启缓存、设置缓存大小、缓存过期机制

热门文章

  1. zabbix web管理页面 中文乱码问题
  2. KMP算法-字符匹配
  3. Spring Cloud Gateway实战之二:更多路由配置方式
  4. JMeter学习笔记--录制脚本(一)
  5. uni-app nvue页面动态修改导航栏按钮
  6. css--元素居中常用方法总结
  7. SpringCloud微服务实战——搭建企业级开发框架(十六):集成Sentinel高可用流量管理框架【自定义返回消息】
  8. Django笔记&教程 5-2 进阶查询——Queryset
  9. [noi38]游戏
  10. 第03章_基本的SELECT语句