研究了一会怎么用jar命令直接打包可执行jar,写篇文章做个笔记。有人看就当是博客没人看就当笔记了。

其实主要步骤是配置MANIFEST.MF,MANIFEST.MF在META-INF文件夹里。

这里给个例子,在本工程了有一个可执行class(就是有main方法)learninggui.viplugincracker.Cracker,四个依赖库文件appFramework-1.0.jar,commons-codec-1.6.jar,jnlp.jar,licensechecker.jar

我们可以通过Eclipse生成的jar文件研究一下MAINFEST.MF怎么写

在Eclipse的Package Explorer邮件单击点export选Runnable JAR file,next

Launch Configuration选择启动的class;

方法一、

Library handling 第一个是把所需要的jar库全部解压到 jar文件的根目录,如果我们用压缩文件解压会看到这样的文件层次

这种方式生成的MANIFEST.MF文件内容如下

Manifest-Version: 1.0
Class-Path: .
Main-Class: learninggui.viplugincracker.Cracker

这里需要注意的是冒号后面要有一个空格(经过试验发现多个空格也是可以的)不然会出现下图的错误

Mainfest-Version是版本号,Class-Path是和CLASSPATH作用一样的,Main-Class就是可运行jar必须的,指定了jar运行时启动的class。因为Class-Path是一个点也就是jar里面的根目录,所以依赖的class文件都可以找到。

于是我们就可以自己依葫芦画瓢了,把所需要的库文件都就压到要打包的文件夹里然后在该文件夹新建META-INF文件夹再在META-INF文件夹新建MANIFEST.MF,内容依上面的实例改写。

然后用jar命令打包

cd 到要打包的jar文件夹,输入以下命令:

jar cvfm a.jar META-INF/MANIFEST.MF .

参数c是指创建归档,v是verbose(啰嗦的意思)指显示详细输出,f是指定文件 不然不能指定输出文件a.jar,最后的m就是指包含MANIFEST.MF的清单信息对应参数META-INF/MANIFEST.MF 注意最后还有一个参数是个点是指从当前目录创建归档。

方法二、

把jar库文件直接打包到自己的jar里面,我们看看Eclipse生成的文件是什么样子。
文件层次如下
大家看到jar库文件都在压缩包的根目录。MANIFEST.MF文件内容如下:
Manifest-Version: 1.0
Rsrc-Class-Path: ./ jnlp.jar appFramework-1.0.jar licensechecker.jar commons-codec-1.6.jar
Class-Path: .
Rsrc-Main-Class: learninggui.viplugincracker.Cracker
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

这里多了两个变量Rsrc-Class-Path和Rsrc-Main-Class,而且Main-Class也已经不是我们正真的class: learninggui.viplugincracker.Cracker了。看Main-Class的包名就知道了是Eclipse的class加载器(不知道是不是重载的ClassLoader)。这么说Rsrc-Class-Path和Resr-Main-Class应该是Eclipse的class 加载器所需要的变量。不过从这个文件我们可以看出来Class-Path的不同值之间是用一个空格来间隔开的。不知道Eclipse是出于什么原因要加入自己的Class加载器。但是我们自己打包的时候肯定不会再去找Eclipse的这些东西,于是我们试着自己打包。把编译好的文件复制到工作目录下,新建一个lib目录来存放以来的jar文件,把所有依赖的jar拷贝到lib目录

这时后我们的MANIFEST.MF内容如下:
Mainfest-Version: 1.0
Class-Path: . ./lib/appFramework-1.0.jar ./lib/commons-codec-1.6.jar ./jnlp.jar ./licensechecker.jar
Main-Class: learninggui.viplugincracker.Cracker
其中Class-Path中的./lib的点 和上面意思相同,都是jar文件内部的根目录。

再用上面的打包命令:

jar cfm a.jar META-INF/MAINFEST.MF .

打包之后双击运行~嗯~feels good~

方法三、

最后再看看Eclipse的第三种打包方式。
打包之后发现在生成jar文档的同一个文件夹还有一个lib文件夹
里面就是我们需要的各种jar文件,我们再看此时的MANIFEST.MF文件是怎么写的:
Manifest-Version: 1.0
Class-Path: . 4_lib/jnlp.jar 4_lib/appFramework-1.0.jar 4_lib/licensechecker.jar 4_lib/commons-codec-1.6.jar
Main-Class: learninggui.viplugincracker.Cracker

经过上面几个MANIFEST.MF的研究这个不用说就很明了了。具体做法依旧不赘述了。

=================================================================
啊~终于写完了,好累……中间还有一次手贱关掉了浏览器==!快疯掉了突然想起来csdn有自动保存~太幸福了

jar 打包java文件相关推荐

  1. myeclipse打包java文件_MyEclipse将Java项目打包成jar文件的三种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MANIFEST.MF", 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFE ...

  2. od怎么解java打包的exe_关于打包java文件并生成可执行文件的问题

    使用java写出的程序不像C++的exe可以直接双击执行,这个有时候会有很多不便,还好java提供了一种打包机制,可以帮助我们实现双击即可执行的夙愿.参考了一些资料,这里把这个过程跟大家分享下.只做演 ...

  3. java生成可执行文件_关于打包java文件并生成可执行文件的问题

    使用java写出的程序不像C++的exe可以直接双击执行,这个有时候会有很多不便,还好java提供了一种打包机制,可以帮助我们实现双击即可执行的夙愿.参考了一些资料,这里把这个过程跟大家分享下.只做演 ...

  4. Java反编译jar成Java文件

    Luyten简介 Luyten Mac版是Mac平台上的一款Java反编译工具,Luyten Mac版是一款很强大的反编译工具包,是一款github的开源工具,它的功能非常强大,界面简洁明晰.操作方便 ...

  5. Jar 打包 EXE文件,可以脱离java环境运行 Jsmooth的使用

    1.首先准备我们的资源,把要转换的Jar文件.精简过的JRE文件夹和想生成的EXE文件的图标(可以是png,jpg等格式,不想加图标可以不弄)放到同一个文件夹内.这一步一定要做,否则可以成功生成,但在 ...

  6. 使用installanywhere打包java文件生成任何平台都可以运行的程序(如.exe)(关闭360!)

    InstallAnywhere使用与下载 (2011-07-05 18:30:36) 转载▼ 标签: install anywhere 安装文件 安装目录 软件解决方案 安装包 it 分类: Java ...

  7. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  8. 把java文件打包成.jar (jar命令详解)

    把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...

  9. 使用命令将单个java文件打包为jar

    思路:先将java文件编译为class文件,然后再打包为jar 参考博文:https://www.cnblogs.com/sxdcgaq8080/p/8126770.html http://www.m ...

最新文章

  1. 如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库...
  2. 『JavaScript』核心
  3. 使用Redis的简单消息队列
  4. 荣耀变鸿蒙系统,鸿蒙系统首批升级机型曝光!荣耀手机遗憾缺席,原因很简单...
  5. C语言6F多少,求助!!请人帮忙画C语言程序流程图.紧急!!!
  6. Asp.Net MVC中使用ACE模板之Jqgrid
  7. django解决借用Model使用数据库时报错 AttributeError: Manager isn‘t accessible via xxxxxModel instances
  8. 解锁设备_苹果新专利:用户可通过头显设备快速解锁多个附近设备
  9. java 视频提取音频 | Java工具类
  10. cocos2d实现语音_【Cocos Creator与C++知识分享】Creator接入呀呀语音SDK
  11. rhel配置DNS分析+实验
  12. day 9/16 css三大特性和盒子模型
  13. 1024_scsdn_徽章获取日_日常工作记录_百度图片爬取小程序
  14. 谈一下自己收集资料和整理资料的经验
  15. 信号的反射(振铃、台阶、回勾、尖峰毛刺)
  16. js导出科学计数法_怎么让js不自动转换成科学计数法
  17. 线性代数一些基础概念
  18. C程序查找段错误的方法
  19. 变电站巡检机器人 代替工人“翻山越岭”
  20. sublime Text Vue中常用插件汇总说明

热门文章

  1. 审查元素:html标签消失。
  2. 什么是操作系统虚拟机?
  3. JavaWeb-03
  4. Swift 网络请求 Moya+RxSwift
  5. ACM顶会CIKM 2022放榜!度小满AI Lab三篇入选
  6. Fiddler Response中Raw显示乱码的解决方式
  7. android中handle的用法
  8. 【云原生学习】史上最全Prometheus学习笔记
  9. SAP FICO 定义成本组件结构
  10. MATLAB怎么计算曲面面积,Matlab曲面面积估计.doc