shell java打包jar脚本
大约 6 分钟
需求
在进行服务器部署测试的时候经常需要更改少量项目代码,在内网环境下需要自动打包脚本更方便进行修改调试
普通java项目打包
两种方式
eclipse 直接export为jar即可,注意添加main函数 注意,带conf配置文件的项目需要把conf文件放到src同级目录下才能正确识别,具体参考mikoFile项目
java命令行 先进行项目编译
./javac -d ~/eclipse-workspace/mikoFile/ ~/eclipse-workspace/mikoFile/src/com/bjtang/mikoFile/MikoFileApplication.java
编译完后会生成 com开头的class文件夹
新建MANIFEST.MF文件
文件内容 注意
每个标签冒号后都跟上一个空格 文件的最后必需要空行,而且必须顶格 有多个jar依赖就需要全部跟在class-path后,用空格分割
Manifest-Version: 1.0
Created-By: 1.6.0_06 (Sun Microsystems Inc.)
Main-Class: com.demo.HelloWord
Class-Path: lib/1.jar lib/2.jar
开始打包为jar
cd class
~/桌面/jdk1.8.0_171/bin/jar -cvfm a.jar MANIFEST.MF com
运行
java -jar a.jar
完整代码
手动太麻烦了,所以用shell写一个打包脚本会更快 创建一个 toJar.sh vim toJar.sh 保存后赋予运行权限 chmod +x toJar.sh
#!/bin/bash
#复制粘贴记得执行 chmod +x *.sh
#在内网运行,jdk执行文件需要指定目录
#!/bin/bash
function compile(){
cur_dir=$(pwd)
echo "读取项目目录$cur_dir"
# echo $cur_dir
project=$cur_dir/ #项目文件
project_src=$cur_dir/src #源代码
project_lib=$cur_dir/lib #依赖库
project_class=$cur_dir/class #编译后的文件目录
# 将项目的src目录下的所有java文件的名称存入到project/src/sources.list文件中
rm -rf $project_src/sources.list
find $project_src -name "*.java" > $project_src/sources.list
echo "读取源代码文件列表"
cat $project_src/sources.list
# $qddemo_class是存放编译的class文件的目录
rm -rf $project_class
echo "创建编译文件夹"
mkdir $project_class
# 批量编译java文件
# 编码:-encoding utf-8
# 依赖库 -Djava.ext.dirs=$project_lib
echo "批量编译中..."
/home/bjtang/桌面/jdk1.8.0_171/bin/javac -encoding utf-8 -Djava.ext.dirs=$project_lib -d $project_class @$project_src/sources.list
#删除存在的jar 若编译过的话
rm -f $project/project.jar
#得到jar文件列表 -printf '%f\n' 的作用是只得到文件名,从而方便构造相对路径
lib_list=$(find $project_lib -name "*.jar" -printf '%f\n')
lib_list_string=''
#拼接Class-Path: lib/*.jar lib/*.jar
for i in ${lib_list[@]}
do
lib_list_string=$lib_list_string' lib/'$i
done
rm -f $project/MANIFEST.MF
echo "MANIFEST.MF文件生成中..."
touch $project/MANIFEST.MF
echo "Manifest-Version: 1.0" > $project/MANIFEST.MF
echo "Created-By: 1.8" >> $project/MANIFEST.MF
echo "Main-Class: com.bjtang.mikoFile.MikoFileApplication" >> $project/MANIFEST.MF
echo "Class-Path:$lib_list_string" >> $project/MANIFEST.MF
cat $project/MANIFEST.MF
cd $project_class
echo "正在打包..."
/home/bjtang/桌面/jdk1.8.0_171/bin/jar -cvfm $project/project.jar $project/MANIFEST.MF com
# 赋予可执行权限
chmod +x $project/project.jar
echo "清理中间文件/文件夹..."
rm -rf $project_src/sources.list
rm -rf $project_class
rm -f $project/MANIFEST.MF
echo "运行包含 /lib /conf project.jar"
echo "打包完成 java -jar project.jar 运行!"
}
compile
exit 0