首页 > 其他分享 >使用原始的jar命令打包

使用原始的jar命令打包

时间:2023-05-30 11:12:54浏览次数:46  
标签:buildDir jar CLASSPATH outputFileName targetDir 原始 file 打包

有些环境由于安全考虑,上传东西很不方便,每次排查问题,都需要刻盘,杀毒扫描,然后审批才能上传,特别繁琐
所以想着在没有maven的情况下,我怎么去打包更新呢,首先想到的是将源码传到服务器上,这样后续可以在服务器上进行修改,
配合javac和jar命令完成打包操作,可以完成jar包的更新,方便自己,写了个简单的脚本


#!/bin/bash
baseDir=/opt/sources/test
buildDir=${baseDir}/.build
# 有一些依赖在编译时需要,如lombok,但是又不需要打进jar包中
provideLibDir=${buildDir}/provide
# 要打进jar里的依赖,形成胖包
depLibDir=${buildDir}/dep
targetDir=${buildDir}/target
mainDir=${baseDir}/src/main
javaDir=${mainDir}/java
resourcesDir=${mainDir}/resources
outputFileName=test.jar

# java肯定是有的,不然跑不起来
JAVA_HOME=/opt/software/java
# 一般服务器都有一个依赖的地方,要不然服务跑不起来,如WEB-INF/lib
LIB_DIR=/opt/dep/lib

export PATH=${JAVA_HOME}/bin:${PATH}

find ${javaDir} -name *.java > ${buildDir}/sources.txt

rm -rf ${buildDir}/${outputFileName}
rm -rf ${targetDir}/*


function addFile2Jar() {
  cd ${1}
  for file in $(find .); do
    echo "正在添加文件:${file}"
    jar -uf ${buildDir}/${outputFileName} ${file} .
  done
}

function addFile2JarExclude() {
  cd ${1}
  for file in $(find . -not -name "${2}" -type f); do
    echo "正在添加文件:${file}"
    jar -uf ${buildDir}/${outputFileName} ${file} .
  done
}


## 收集依赖
for jar in "${provideLibDir}"/*.jar; do
  CLASSPATH="${CLASSPATH}:$jar"
done
for jar in "${LIB_DIR}"/*.jar; do
  CLASSPATH="${CLASSPATH}:$jar"
done
echo "CLASSPATH: ${CLASSPATH}"
  
## 编译java成class
javac -cp ${CLASSPATH} -d ${targetDir} -encoding utf8  @${buildDir}/sources.txt

for jar in ${depLibDir}/*.jar; do
  cp ${jar} ${targetDir}
  cd ${targetDir}
  jarname=$(basename ${jar})
  echo "开始解析依赖...${jar},文件名:${jarname}"
  jar -xf ${jarname}
  # 解压完了,直接把原来的jar删除掉
  rm -rf ${targetDir}/${jarname}
done

cd ${targetDir}
jar -cvf ${buildDir}/${outputFileName}  .

## 将资源文件更新到jar包中
addFile2Jar "${resourcesDir}"
## jar命令不会添加.class之外的文件,还得手动加
addFile2JarExclude "${targetDir}" "*.class"

# 清理没用的东西
rm -rf ${targetDir}/*
rm -rf ${buildDir}/jartmp*.tmp

echo "编译完成: ${buildDir}/${outputFileName}"

标签:buildDir,jar,CLASSPATH,outputFileName,targetDir,原始,file,打包
From: https://www.cnblogs.com/xixisix/p/17442683.html

相关文章

  • 关于Addressable打包图集与图片都打进去造成冗余
    1)关于Addressable打包图集与图片都打进去造成冗余​2)Unity如何计算Root动画旋转3)IL2CPP编译的Protobuf反射类运行时报空4)为什么ActiveConstraints会出现过高的现象这是第337篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面......
  • Java实现打包压缩文件或文件夹生成zip以实现多文件批量下载
    有时候在系统中需要一次性下载多个文件,但逐个下载文件比较麻烦。这时候,最好的解决办法是将所有文件打包成一个压缩文件,然后下载这个压缩文件,这样就可以一次性获取所有所需的文件了。下面是一个名为CompressUtil的工具类的代码,它提供了一些方法来处理文件压缩和下载操作:importor......
  • # yyds干货盘点 # 使用PyInstaller工具将Python程序打包成Mac可执行文件步骤
    大家好,我是皮皮。一、前言前几天在Python钻石群【JethroShen】问了一个Python打包的问题,这里拿出来给大家分享下。二、实现过程这里【eric】问了【ChatGPT】,并给出了代码,如下所示:在Mac系统中,Python程序不能直接打包成.exe可执行文件,因为.exe是Windows系统下的可执行文件格式,而Mac......
  • 2023.5.29Linux系统压缩打包
    02.Linux系统压缩打包1.zip压缩工具2.TAR压缩工具3.TAR实践案例windows下我们接触最多的压缩文件就是rar格式,但linux有自己所特有的压缩工具如果希望windiows和linux互相能使用的压缩工具,建议.zip格式压缩的好处主要有节省磁盘空间占用率节省网络传输带宽消耗网络传输更......
  • 使用PyInstaller工具将Python程序打包成Mac可执行文件步骤
    大家好,我是皮皮。一、前言前几天在Python钻石群【JethroShen】问了一个Python打包的问题,这里拿出来给大家分享下。二、实现过程这里【eric】问了【ChatGPT】,并给出了代码,如下所示:在Mac系统中,Python程序不能直接打包成.exe可执行文件,因为.exe是Windows系统下的可执行文件格......
  • Maven 打包时丢失xml、properties文件
        maven执行package命令打包时,src/main/java路径下的xml和properties都没打进来。      解决方式:pom.xml中加入resources配置 <build><resources><resource><directory>src/main/java</directory><includes>......
  • U3DFrameWorkDemo:四、资源打包和热更
    代码参考代码文件参考下述详解的类图,工程参考第零章工程说明概述热更新方便用户更新,增加用户的留存量。它依赖打包生成的版本文件。思路打包考虑分包策略,包体太大加载速度慢且可能有无效的内存冗余,包体太小可能会频繁加载AB造成效率下降。核心思想是把用到的东西放在一起,通......
  • jsp项目使用jstl(c标签)及jstl.jar和standard.jar
    使用jstl很大程度增加了jsp可读性。第一步,项目必须的两个包jstl.jar和standard.jar,①可以在下载菜鸟教程的:jakarta-taglibs-standard-1.1.2.zip,②也可以在自己电脑的tomcat里找到他们,路径是C:\ProgramFiles\Java\apache-tomcat-8.5.33\webapps\examples\WEB-INF\lib准备好了这两个......
  • 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/
     第一个错误 刷新后出现第二个 org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.admin.adminFace_jsp 解决方法:1.1检查WEB-INF下的lib文件夹里是否导入了写jstl-1.2.jar(jstl.jar),standard1.1.jar(standard.jar)如果没有......
  • IDEA中创建java多模块项目和打包
    文章来源:https://www.jb51.net/article/210892.htm#_label7   非常感谢。一、使用springinitializr创建java工程1、启动IDEA,新建java工程,使用向导创建一个springboot框架的工程 2.设置项目信息,java版本选择8 3、勾选项目需要用到的依赖 4、设置项目名称,点击......