芋道源码的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.mzph.cn/web/6772.shtml

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

相关文章

我这次没有蹭Oracle发布热度的原因

这次没有去蹭热度&#xff0c;原因有几个。 主观 确实是生病了&#xff0c;身体不舒服&#xff0c;那几个卷王在卷公众号的时候&#xff0c;我在床上卷成一团。 不和这几个打了鸡血的人比了。我卷了一点和他们不一样的。我节日期间看到我初中同班同学发的微博。 对这个就是我…

大学生上班族必备!九个线上兼职秘籍,让你远离失业风险

互联网时代&#xff0c;兼职新风尚&#xff1a;这些靠谱兼职让你轻松增收 随着互联网技术的飞速发展&#xff0c;兼职工作已成为许多人增加收入、提升自我能力的新选择。本文将为您揭秘一些适合大学生和上班族的靠谱兼职工作&#xff0c;助您轻松找到适合自己的兼职机会。 一…

docker系列8:容器卷挂载(上)

目录 传送门 从安装redis说起 什么是容器卷挂载 操作系统的挂载 日志文件一般是"首恶元凶" 挂载命令 容器卷挂载 卷挂载命令 启动时挂载 查看挂载卷信息 容器卷管理 查看卷列表 创建容器卷 具名挂载与匿名挂载 具名挂载 传送门 docker系列1&#xff…

C++ : list类及其模拟实现

目录 一、list的介绍和使用 list的介绍 list的使用 1.list的构造 构造函数 2.list iterator 的使用 3.list capacity 4.list element access 5.list modifiers 6.list的迭代器失效 二、list的模拟实现 要点 list类模拟实现部分接口全部代码展示 一、list的介绍和使…

Docker:centos7安装docker

官网&#xff1a;https://www.docker.com/官网 文档地址 - 确认centos7及其以上的版本 查看当前系统版本 cat /etc/redhat-release- 卸载旧版本 依照官网执行 - yum安装gcc相关 yum -y install gccyum -y install gcc-c- 安装需要的软件包 yum install -y yum-utils- 设置s…

深入学习Linux内核页框回收

目录 算法 1.选择目标页 2.PFRA设计 3.反向映射 3.1.匿名页的反向映射 3.2.try_to_unmap_anon()函数 3.3.try_to_unmap_one()函数 映射页的反向映射 优先搜索树 try_to_unmap_file()函数 PFRA实现 最近最少使用(LRU)链表 在LRU链表之间移动页 mark_page_accessed(…

Android使用kts发布aar到JitPack仓库

Android使用kts发布aar到JitPack 之前做过sdk开发&#xff0c;需要将仓库上传到maven、JitPack或JCenter,但是JCenter已停止维护&#xff0c;本文是讲解上传到JitPack的方式,使用KTS语法&#xff0c;记录使用过程中遇到的一些坑.相信Groovy的方式是大家经常使用的&#xff0c;…

Java基于Spring Boot框架的课程管理系统(附源码,说明文档)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

基于Springboot的校园疫情防控系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园疫情防控系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

C# WCF服务(由于内部错误,服务器无法处理该请求。)

由于内部错误&#xff0c;服务器无法处理该请求。有关该错误的详细信息&#xff0c;请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端&#xff0c;或打开对每个 Microsoft .NET …

从零开始:Django项目的创建与配置指南

title: 从零开始&#xff1a;Django项目的创建与配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 后端开发 tags: DjangoWebDevPythonORMSecurityDeploymentOptimization Django简介&#xff1a; Django是一个开源的高级Python Web框架&#xff…

C语言之整形提升和算术转换

目录 前言 一、整形提升 二、算术转换 总结 前言 本文主要介绍C语言中的整形提升和算术转换的概念和意义&#xff0c;以及例题帮助理解&#xff0c;了解之后&#xff0c;我们就能知道在C语言中&#xff0c;字符型变量如何计算以及如果变量的类型、字节大小不一致的情况下&am…

golang学习笔记(内存模型和分配机制)

操作系统的存储管理 虚拟内存管理 虚拟内存是一种内存管理技术&#xff0c;它允许操作系统为每个进程提供一个比实际物理内存更大的地址空间。这个地址空间被称为虚拟地址空间&#xff0c;而实际的物理内存则被称为物理地址空间。使用虚拟内存有以下几点好处&#xff1a; 内…

git 第一次安装设置用户名密码

git config --global user.name ljq git config --global user.email 15137659164qq.com创建公钥命令 输入后一直回车 ssh-keygen -t rsa下面这样代表成功 这里是公钥的 信息输入gitee 中 输入下面命令看是否和本机绑定成功 ssh -T gitgitee.com如何是这样&#xff0c;恭喜…

基于51单片机PWM控制直流电机—数码管显示

基于51单片机PWM控制直流电机 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.L298驱动直流电机&#xff1b; 2.数码管显示转动方向和PWM占空比&#xff08;0-100%&#xff09;&#xff1b; 3.按键控制PWM占空比来加/…

20232803 2023-2024-2 《网络攻防实践》实践八报告

目录 1. 实践内容2. 实践过程2.1 动手实践任务一2.2 动手实践任务二&#xff1a;分析Crackme程序2.2.1 crackme1.exe2.2.2 crackme2.exe 2.3 分析实践任务一2.4 分析实践任务二 3. 学习中遇到的问题及解决4. 学习感悟、思考等 1. 实践内容 动手实践任务一&#xff1a;对提供的r…

R语言实战——中国职工平均工资的变化分析——相关与回归分析

链接: R语言学习—1—将数据框中某一列数据改成行名 R语言学习—2—安德鲁斯曲线分析时间序列数据 R语言学习—3—基本操作 R语言学习—4—数据矩阵及R表示 R语言的学习—5—多元数据直观表示 R语言学习—6—多元相关与回归分析 1、源数据 各行业平均工资变化 各地区平均工资…

list 的模拟实现

目录 1. list 的实现框架 2. push_back 3. 迭代器 4. constructor 4.1. default 4.2. fill 4.3. range 4.4. initializer list 5. insert 6. erase 7. clear 和 destructor 8. copy constructor 9. operator 10. const_iterator 10.1. 普通人的处理方案 10.2. …

数据库复习1

1.试述数据、数据库、数据库管理系统、数据库系统的概念 1.数据(Data): 数据是关于事物的符号表示或描述。它可以是任何事实、观察或者测量的结果&#xff0c;如数字、字符、声音、图像等。数据在没有上下文的情况下可能没有明确的意义。 2.数据库(Database): 数据库是一个持…

Linux——socket编程之tcp通信

前言 前面我们学习socket的udp通信&#xff0c;了解到了socket的概念与udp的实现方法&#xff0c;今天我们来学习一下面向连接的tcp通信。 一、tcp套接字创建 UDP和TCP都是通过套接字&#xff08;socket&#xff09;来实现通信的&#xff0c;因此TCP也得使用socket()接口创建…