shell执行解压jar压缩jar

为什么有这种需求,万恶的mac上面无法像Win上面爽快的操作jar文件,Win上面可以直接用winRAR删掉jar里面的文件,不涉及解压jar的问题。但这种简单的需求在mac上就很难受,于是就生出了这篇文章。
说一下最近的两个需要看jar的情况:
1、Ali的utdid的包,这个玩意儿做统计或者集成友盟啥的都有可能遇到,最近做Unity,把Android当做插件给Unity用的时候,有时候Unity的C#插件跟Android的插件混起来就可能会有这个问题。
2、做了一个java的七牛上传的jar,使用的时候只需要调用一下这个jar就可以调用七牛上传了。做这个的时候老是提示MF文件不存在,想看看到底打没打到jar里面的时候就很难受,看不到。
先看下解压jar的方法

#!/bin/sh
tempDir="qiniuJarCodeDir"
qiniuJar="QiniuUpload.jar"
rm -rf $tempDir
mkdir $tempDir
cp $qiniuJar $tempDir
cd $tempDir
unzipJarCmd="jar -xf $qiniuJar"
$unzipJarCmd
rm -rf $qiniuJar

核心的就是 jar -xf 如果需要打印信息的话就是 jar -xvf
下面是把文件打包成jar的方法

#!/bin/sh
tempDir="qiniuJarCodeDir"
qiniuJar="QiniuUpload.jar"
cd $tempDir
#-c:创建新的存档 -m:包含来自标明文件的标明信息 -f:指定存档文件名
zipJarCmd="jar -cmf META-INF/MANIFEST.MF $qiniuJar ./"
$zipJarCmd

java -jar QiniuUpload.jar $1 $2 $3

我们知道如果我们需要使用java -jar执行jar包的话,就需要在MANIFEST.MF中定义Main-Class:main函数所在的全限定类名。该类必须是一个可执行的类,可以侠义理解为存在 main()函数的类

我们看下jar命令的参数
jar命令格式:jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名...
其中{ctxu}这四个参数必须选选其一。[v f m e 0 M i ]是可选参数,文件名也是必须的。

参数 详细解析
-c 创建一个jar包
-t 显示jar中的内容列表
-x 解压jar包
-u 添加文件到jar包中
-f 指定jar包的文件名
-v 生成详细的报造,并输出至标准设备
-m 指定manifest.mf文件.(manifest.mf文件中可以对jar包及其中的内容作一些一设置)
-0 产生jar包时不对其中的内容进行压缩处理
-M 不产生所有文件的清单文件(Manifest.mf)。这个参数与忽略掉-m参数的设置
-i 为指定的jar文件创建索引文件
-C 表示转到相应的目录下执行jar命令,相当于cd到那个目录,然后不带-C执行jar命令

当然就像我们上面说的像utdid的问题,如果我们需要删掉某些文件,就先解压,然后删掉某些文件夹再打包起来就可以这样做。

aliJar="alipaySdk-20170725.jar"

SEC_JAR_PATH="libs/$aliJar"
DEST_ALI_PATH="template/ali/"

mkdir $DEST_ALI_PATH
cp $SEC_JAR_PATH $DEST_ALI_PATH
cd $DEST_ALI_PATH
unzipJarCmd="jar -xvf $aliJar"
$unzipJarCmd
rm -rf "com/ta/"
rm -rf "com/ut/"
rm -rf $aliJar
zipJarCmd="jar -cvf $aliJar ./"
$zipJarCmd
cdCmd="cd ../../"
$cdCmd

当然如果只是需要当做jar包,不需要用作可执行的jar就不需要manifest.mf文件,直接把文件打包成jar就好了

你可能感兴趣的:(shell执行解压jar压缩jar)