芋道源码的Springboot 项目打包,配置和依赖包分开

Springboot 项目,把依赖包和开发的应用都打在一个jar 里很简单,但有个问题是,修改点东西就要再次全量更新。

这里介绍如何用assembly 来实现不打依赖包。

1、 在主模块中,需要引入 assembly.xml配置:

src/main/assembly/assembly.xml
<?xml version="1.0" encoding="UTF-8" ?>
<assemblyxmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0http://maven.apache.org/xsd/assembly-1.1.0.xsd
http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 "><!--必须写,否则打包时会有 assembly ID must be present and non-empty 错误这个名字最终会追加到打包的名字的末尾,如项目的名字为 speed-api-0.0.1-SNAPSHOT,则最终生成的包名为 speed-api-0.0.1-SNAPSHOT-bin.zip--><id>bin</id><!-- 打包后的文件格式,可以是zip,tar,tar.gz,tar.bz2,jar,war,dir --><formats><format>zip</format></formats><!-- 压缩包下是否生成和项目名相同的根目录 --><includeBaseDirectory>true</includeBaseDirectory><dependencySets><dependencySet><!-- 不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录 --><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib</outputDirectory><unpack>false</unpack></dependencySet></dependencySets><fileSets><!-- 把项目相关的说明文件,打包进zip文件的根目录 --><fileSet><directory>erp_web</directory><outputDirectory>/erp_web</outputDirectory></fileSet><fileSet><directory>${project.basedir}/target</directory><includes><include>*.jar</include></includes><outputDirectory>/lib</outputDirectory></fileSet><!-- 把项目的配置文件,打包进zip文件的config目录 --><fileSet><directory>${project.basedir}/src/main/resources</directory><includes><include>*.properties</include><include>*.yml</include><include>*.yaml</include><include>*.xml</include></includes><outputDirectory>/config</outputDirectory></fileSet><!-- 把项目的脚本文件,打包进zip文件的bin目录 --><fileSet><directory>${project.basedir}/src/main/bin</directory><outputDirectory>/bin</outputDirectory><includes><include>run-manage.sh</include></includes><lineEnding>unix</lineEnding></fileSet><fileSet><directory>${project.basedir}/src/main/bin/</directory><outputDirectory>/</outputDirectory><includes><include>start.bat</include><include>restart.sh</include><include>start.sh</include><include>stop.sh</include><include>status.sh</include></includes></fileSet><fileSet><directory>docs</directory><outputDirectory>/docs</outputDirectory></fileSet><fileSet><directory>${project.basedir}</directory><includes><include>*.md</include><include>*.txt</include></includes><outputDirectory>/</outputDirectory></fileSet><!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 --><fileSet><directory>${project.build.directory}</directory><outputDirectory></outputDirectory><includes><include>*.jar</include></includes></fileSet></fileSets>
</assembly>

pom.xml 修改build 节点:

<build><finalName>${project.artifactId}</finalName><plugins><!-- 指定启动类,将依赖打成外部jar包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 --><addMavenDescriptor>false</addMavenDescriptor><manifest><!-- 是否要把第三方jar放到manifest的classpath中 --><addClasspath>true</addClasspath><!-- 外部依赖jar包的最终位置 --><classpathPrefix>lib/</classpathPrefix><!-- 项目启动类 --><mainClass>cn.iocoder.yudao.server.YudaoServerApplication</mainClass></manifest></archive></configuration></plugin><!-- 使用assembly打包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><descriptors><!-- assembly配置文件位置 --><descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><!-- 打包发布时,跳过单元测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin></plugins><resources><resource><directory>src/main/webapp</directory><targetPath>META-INF/resources</targetPath><includes><include>**/**</include></includes></resource></resources></build>

linux 启动shell脚本

SERVER_NAME=jdeps-shop
readonly APP_HOME=${FILE_PATH:-$(dirname $(cd `dirname $0`; pwd))}
#readonly JAVA_HOME=""
readonly CONFIG_HOME="$APP_HOME/config"
readonly LIB_HOME="$APP_HOME/lib"
readonly LOGS_HOME="$APP_HOME/logs"
readonly PID_FILE="$LOGS_HOME/application.pid"
readonly APP_MAIN="$APP_HOME/yudao-server.jar"
readonly APP_MAIN_CLASS="cn.iocoder.yudao.server.YudaoServerApplication"
readonly LOG_CONFIG="$CONFIG_HOME/logback-spring.xml"
readonly JAVA_RUN="-Dlogs.home=$LOGS_HOME -Dlogging.config=$LOG_CONFIG -Dspring.config.location=file:$CONFIG_HOME/ -Dspring.pid.file=$PID_FILE -Dspring.pid.fail-on-write-error=true"
readonly JAVA_OPTS="-server -Xms128m -Xmx320m -XX:PermSize=128M -XX:MaxPermSize=256M $JAVA_RUN"
readonly JAVA="java"
PID=0
if [ ! -x "$LOGS_HOME" ]
thenmkdir $LOGS_HOME
fi
#chmod +x -R "$JAVA_HOME/bin/"
functions="/etc/functions.sh"
if test -f $functions ; then. $functions
elsesuccess(){echo " SUCCESS! $@"}failure(){echo " ERROR! $@"}warning(){echo "WARNING! $@"}
fi
function checkpid() {PID=$(ps -ef | grep $APP_MAIN_CLASS | grep -v 'grep' | awk '{print int($2)}')if [[ -n "$PID" ]]thenreturn 0elsereturn 1fi
}
function start() {checkpidif [[ $? -eq 0 ]]thenwarning "[$APP_MAIN_CLASS]: already started! (PID=$PID)"elseecho -n "[$APP_MAIN_CLASS]: Starting ..."#nohup java -cp conf:lib/*.jar:jdeps-shop-1.0.jar com.jdeps.eshop.JdepsShopApplication > logs/jdeps.log 2>&1 &#JAVA_CMD="nohup $JAVA $JAVA_OPTS -jar $LIB_HOME/$APP_MAIN_CLASS > /dev/null 2>&1 &"JAVA_CMD="nohup $JAVA $JAVA_OPTS -cp conf:$LIB_HOME/*  $APP_MAIN_CLASS > nohup.out 2>&1 &"echo "$APP_HOME"echo "Exec cmmand : $JAVA_CMD"sh -c "$JAVA_CMD"sleep 3checkpidif [[ $? -eq 0 ]]thensuccess "(PID=$PID) "elsefailure " "fifi
}
function stop() {checkpidif [[ $? -eq 0 ]];thenecho -n "[$APP_MAIN_CLASS]: Shutting down ...(PID=$PID) "kill -9 $PIDif [[ $? -eq 0 ]];thenecho 0 > $PID_FILEsuccess " "elsefailure " "fielsewarning "[$APP_MAIN_CLASS]: is not running ..."fi
}
function status() {checkpidif [[ $? -eq 0 ]]thensuccess "[$APP_MAIN_CLASS]: is running! (PID=$PID)"return 0elsefailure "[$APP_MAIN_CLASS]: is not running"return 1fi
}
function info() {echo "System Information:"echo echo "****************************"echo `head -n 1 /etc/issue`echo `uname -a`echoecho "JAVA_HOME=$JAVA_HOME"echo echo "JAVA Environment Information:"echo `$JAVA -version`echoecho "APP_HOME=$APP_HOME"echo "APP_MAIN_CLASS=$APP_MAIN_CLASS"echo echo "****************************"
}
case "$1" in'start')start;;'stop')stop;;'restart')stopstart;;'status')status;;'info')info;;*)echo "Usage: $0 {help|start|stop|restart|status|info}";;
esac
exit 0

备注:

mvn install 运行成功后,会在模块target/目录下生成一个 xxx.zip 压缩文件,解压缩后的文件目录为:

上传到服务器后,运行 start.sh 对应的配置文件config/application-local.yaml 所以你要修改这个配置,数据库连接等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681687.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DUX 主题 版本:8.2 WordPress主题优化版

主题下载地址&#xff1a;DUX 主题优化版.zip 支持夜间模式、快讯、专题、百度收录、人机验证、多级分类筛选&#xff0c;适用于垂直站点、科技博客、个人站&#xff0c;扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、自动缩略图

如何通过wifi网络将串口数据发送到多个设备

摘要&#xff1a;当lora电台的速率无法满足高速传输时&#xff0c;可以考虑用“串口服务器”。本文介绍一下如何使用TP-LINK的TL-CPE300D实现一对多的数据发送。 当前也有使用lora电台的&#xff0c;但是lora电台支持的速率有限&#xff0c;可能最大支持到9600&#xff0c;甚至…

python数据分析所需要了解的结构基础

Python语言基础——结构基础 前言一、列表列表的介绍列表的语法示例注意要点符号元素切片运算符示例 二、字典字典的介绍字典的特点字典的语法 三、元组元组的介绍元组的语法示例 四、字符串字符串的介绍字符串的语法 五、操作运算符算术运算符赋值运算符比较运算符逻辑运算符位…

CMake创建跨平台OPenGL工程(学习笔记)

一、跨平台环境基本配置 1、环境搭建 1&#xff09;linux OpenGL环境搭建参考&#xff1a;ubuntu18.04 OpenGL开发&#xff08;显示YUV&#xff09;_ubuntu opengl-CSDN博客 https://blog.51cto.com/cerana/6433535 2&#xff09;windows下环境搭建 OpenGLVisual Studio20…

TensorFlow、pytorch和python对应的版本关系

安装深度学习框架的时候需要考虑版本的关系&#xff0c;不然装了用不了就尴尬了。 深度学习首先得问题就是用CPU跑&#xff0c;还是GPU跑。。当然有英伟达显卡的都想用GPU跑&#xff0c;不然买显卡是做啥、、GPU跑得多块&#xff0c;一下就训练完了。但是有的同学没得gpu&…

操作系统——进程控制

创建进程 fork fork是一个系统调用函数&#xff0c;用来创建子进程&#xff0c;通过多个执行流完成任务。子进程和父进程共用一份代码&#xff0c;子进程数据使用写时拷贝&#xff0c;即子进程数据在创建的时候和父进程相同&#xff0c;但是当要修改数据的时候&#xff0c;子进…

【FreeRTOS 快速入门】-- 1、STM32工程移植FreeRTOS

目录 一、新建STM32工程 为了示范完整的移植过程&#xff0c;我们从0开始&#xff0c;新建一个标准的STM32点灯工程。 &#xff08;本篇以CubeMX作示范&#xff0c;CubeIDE操作近同&#xff0c;可作对比参考&#xff09; 1、新建工程 选择 芯片型号 新建工程 2、搜索芯片型号…

win10 远程桌面无法连接,解决Win10远程桌面无法连接问题的方法

Windows 10操作系统中&#xff0c;远程桌面是一项非常实用的功能&#xff0c;它允许用户从另一台设备远程访问和控制另一台计算机。然而&#xff0c;有时候用户可能会遇到Win10远程桌面无法连接的问题。本文将探讨可能导致这个问题的原因&#xff0c;并提供相应的解决方案。 确…

7-38 数列求和-加强版

题目链接&#xff1a;7-38 数列求和-加强版 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码 1. 代码实现 #include <stdio.h> #include <string.h> #include <malloc.h>void addTerm(char *sum, int A, int N);int main() {int A, N;char *sum;// 读…

C++音视频开发面试题

下面是音视频开发面试题精选&#xff1a; 1、纹理抗锯齿有哪些算法&#xff1f;各有哪些利弊&#xff1f;2、使用 OpenGL PBO 为什么能提高效率&#xff1f;3、iOS 如何使用分段转码&#xff0c;如何设置分片大小&#xff1f;4、VideoToolbox 中是不是不存在平面格式&#xff…

前端css中径向渐变(radial-gradient)的使用

前端css中径向渐变的使用 一、前言二、主要内容说明&#xff08;一&#xff09;、径向渐变的形状1.椭圆形渐变&#xff08;ellipse&#xff09;&#xff0c;源码12.源码1运行效果3.圆形渐变&#xff08;circle&#xff09;&#xff0c;源码24.源码2运行效果 &#xff08;二&…

vue3+ts--实际开发之--table表格打印或者保存

vue3实现指定区域打印&#xff08;导出&#xff09;功能-主要是解决分页内容分割问题 一、 问题页面效果二、 Print.js相关属性 和使用1. 介绍2. 安装引入3. PrintJS参数配置表 三 、解决关于分页文字或者表格被分割问题&#xff0c;解决后如下&#xff1a;1. 设置一个自定义ta…