技术标签: java解压jar包的方法
解压jar包
jar xf xxx.jar
打包成jar包
方法一:通过jar命令
jar命令的用法:
下面是jar命令的帮助说明:
用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
-c 创建新的归档文件
-t 列出归档目录
-x 解压缩已归档的指定(或所有)文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
-f 指定归档文件名
-m 包含指定清单文件中的清单信息
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储;不使用任何 ZIP 压缩
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。
示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并
将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
jar cvfm classes.jar mymanifest -C foo/ .
下文假设编译后的class文件在bin目录下
一、打包成一般的jar包
输入如下命令即可:
jar cvf counter.jar -C bin .
其中,“-C bin”实际上是告诉jar命令先cd到bin目录下,再在此目录执行没有参数“-C bin”的命令,等价于:
cd bin
jar cvf counter.jar . // "."代表当前路径
二、打包成可运行的jar包
要打包成可运行的jar包,有两种方法,一是手动创建MANIFEST.MF文件,并在其中指定主类;二是使用jar的-e参数指定可运行jar包的入口点(即main类的完全名称).
以Java源代码行数统计程序的打包为例,演示如何打包:
1. 手动创建MANIFEST.MF文件:
1)首先编辑MANIFEST.MF文件,内容如下:
Manifest-Version: 1.0
Created-By: rsljdkt
Class-Path: .
Main-Class: Main
说明:
第一行指定清单的版本,若无,则JDK默认生成:Manifest-Version: 1.0
第二行指明创建的作者,若无,则JDK默认生成Created-By: 1.6.0_22(Sun Microsystems Inc.)
第三行指定主类所在类路径,
第四行指明程序运行的主类
2)使用jar命令进行打包:
jar cvfm counter.jar MANIFEST.MF -C bin .
说明:
参数f:指定打包后的包名。
参数m:指定自定义的MANIFEST.MF清单文件,否则,JDK会自动生成不包含Main-Class的默认清单。
参数c:指定是创建新的归档文件。
参数v:在标准输出中生成详细输出,该选项是可选的。
2. 使用-e参数指定入口点:
执行如下命令即可:
jar cvfe counter.jar Main -C bin .
方法二:使用Eclipse的Export功能:
一、打包成一般的jar包:
步骤如下:
1)在要打包的项目上右击,选择Export
2)在弹出的窗口中,选择Java -> JAR File,然后点击next按钮
3)在JAR File Specification窗口中,设置打包成的文件名和存放位置,点击两侧next
4)在JAR Manifest Specification窗口中,设置MANIFEST.MF清单文件的配置,
若仅仅打包成单纯的jar包的话,不用做任何修改,采取默认即可
若打包成可执行jar包的话,可以使用已存在的MANIFEST文件或者直接选择Main class
5)点击Finish按钮,完成打包。
二、打包成可运行的jar包
步骤如下:
1)在要打包的项目上右击,选择Export
2)在弹出的窗口中,选择Java -> Runnable JAR File,然后点击next按钮
3)在Runnable JAR File Specification窗口中,选择Launch configuration和Export destination
4)点击Finish按钮,打包完成。
文章浏览阅读1.6k次。支持使用多块GPU进行训练import osimport torchimport torch.nn as nnfrom torch import optimfrom torch.utils.data import DataLoaderfrom torchvision import transforms, datasets, modelsfrom torchsummary import summaryclass VGGNet(nn.Module): def __init__(sel_vgg16bn_cifar10.pth
文章浏览阅读182次。一、【常规SQL语句优化】 truncate 写出存储过程动态删除表的SQL并加注释…create or replace procedure trun_table(table_deleted in varchar2) as–创建一个存储过程,传入一个表示表名称的参数,实现清空指定的表cur_name integer;–定义内部变量,存储打开的游标begincur_name := dbms..._oracle11g explain
文章浏览阅读609次。NSData: 对缓冲区的封装 缓冲区由nadata释放属性列表属性列表的写入:每个集合类中都有一个放法-writeToFile:atomically: 该方法可以将集合中的内容 写入到.plis文件中 atomically参数是决定写入新内容时 是否先将新内容保存到临时文件 等完全写入了新内容 再交换 这样可以更加安全的写入(缺点 无法返回错误信息)_oclist
文章浏览阅读8.3k次,点赞2次,收藏6次。Golang爬虫基础:通过代理IP发送请求_golang net/http req.host = 指定ip访问请求
文章浏览阅读933次。原文:https://blog.csdn.net/autom_lishun/article/details/88786566iOS APP设置启动图片LaunchImages原文:https://blog.csdn.net/st646889325/article/details/78732091关于设置launchImage:工程配置信息中设置显示launchImage:1、删除L..._ipad launchimage
文章浏览阅读1.4w次,点赞23次,收藏40次。问题出在.. 用cmd直接install tensorflow运行项目的时候出现报错 Could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll not found 解决办法 在这个网站上直接下载即可,????指路 如果报错缺的不是110,或者是101? 直接搜索就可以找到想要找的 最后一步 ..._could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll
文章浏览阅读790次。在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回、后退、上一页等按钮实现自己的关闭页面、调整到指定页面或执行一些其它操作的需求,那在代码中怎样监听当点击微信、支付宝、百度糯米、百度钱包等app的返回按钮或者浏览器的上一页或后退按钮的事件呢。我相信很多朋友像我一样,在百度、搜狗里面搜索很久都没找到方法。下面就来告诉大家怎样监听的方法:首先我们要了解浏览器的history。大家知道在页面中我们可以使用javascript window history,后退到前面页面,但是由于..._"window.addeventlistener(\"popstate\", function(){ if($this.isoperateback) { th"
文章浏览阅读2.4k次。1.物理地址用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。在实地址模式(因为实模式没有分段或分页机制,Cpu不进行自动地址转换)下,程序员操作的就是物理地址,所谓的物理地址就是物理内存上的32位地址,即物理地址可以直接定位到物理内存上的位置,无论任何操作,最终都必须要得到物理地址才能在物理内存上进行操作.2.虚拟地址操作系统都提供了虚拟内存(virtual mem_什么是物理地址和虚拟地址
文章浏览阅读690次。# 局端设备VS终端设备 终端设备(Terminal) 即最终到达用户端的设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等。 在IBM环境中: 终端是端点用户用于和主机通信的设备。这种设备可以是监视器、键盘设备或打印设备。 它们用同轴电缆和一个群控器(cluster controller)相连,这个群控器可以直接连接到一台主机,也可以通过一个通信控制器连接到这台主机。 多达32个终端可以连接到一个单一的群控器上,具体数字要视这个群控器的型号而_什么是局端什么是终端
文章浏览阅读2.2k次。兼容 输入框直接输入和直接赋值。(双向绑定)RACSignal *phoneInputSignal= [[RACObserve(self.phoneInputView, text) merge: [self.phoneInputView rac_textSignal]] map:^id _Nullable(id _Nullable value) { return @([va..._ios rac监听uitextview改变
文章浏览阅读1.5k次。问题描述:如题目所示,他就一直卡在那里,出不来。对问题的思考:我所用的程序是我以前做的一个程序,这次又做了一套硬件,结果他卡在那里出不来,我观察了一下NRF24L01模块,发现它上面的晶振很旧。结论与解决办法:太熟悉这个行业了,一看这芯片就是翻新货,首先恭喜自己买到了翻新货,能够正常初始化,但就会遇到这种问题,这也不能怪卖家,供应商经常会在一堆好货里面混这么几块坏的,心眼太坏了。解决办法当然很简单,直接换一块好的就好了。..._卡在while(nrf24l01_irq!=0);
文章浏览阅读1.1k次,点赞2次,收藏3次。摄像头基础介绍 一、摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中进行处理,最终转换成手机屏幕上能够看到的图像。数字信号处理芯片DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通过一系列复杂的数学算法运算,对数..._高通aop camera