当前位置: 首页 > news >正文

springboot多模块父pom打包正常,单模块报错

背景:因为项目开发中经常发测试环境,发现使用阿里的插件能一键上传,不用手动上传比较方便。但是多模块有多个启动jar的时候,全局打包太慢,单独打发现报错。这里贴一下我使用这个插件的方式:

附带一个我感觉不错的脚本,使用这个插件把jar包放到服务器目录,然后实现备份发布

#!/bin/bashAPP_NAME=-admin.jar
ENV=sit
APP_HOME=/home/admin         # <<< 加:应用目录
NEW_JAR_DIR=/root                      # 新 JAR 包来源目录
BACKUP_DIR=$APP_HOME/old-jar           # 旧 JAR 备份目录(绝对路径更安全)# 切换到 APP_HOME 目录,避免路径错误
cd "$APP_HOME" || {echo "ERROR: 目录 $APP_HOME 不存在,终止执行"exit 1
}usage(){echo "Usage: sh $0 [start|stop|restart|status|-v]"exit 1
}# 检查程序是否在运行
is_exist(){pid=$(ps -ef | grep "$APP_NAME" | grep -v grep | awk '{print $2}')if [ -z "$pid" ]; thenreturn 1elsereturn 0fi
}backup_and_update_jar(){if [ -f "$APP_NAME" ]; thentimestamp=$(date +"%Y%m%d%H%M%S")cp "$APP_NAME" "${APP_NAME%.*}-$timestamp.jar"mv "${APP_NAME%.*}-$timestamp.jar" "$BACKUP_DIR"echo "旧版本已备份到 $BACKUP_DIR/${APP_NAME%.*}-$timestamp.jar"fiif [ -f "$NEW_JAR_DIR/$APP_NAME" ]; thenrm -f "$APP_NAME"mv "$NEW_JAR_DIR/$APP_NAME" "$APP_NAME"echo "使用新版本jar"elseecho "未找到新JAR包 $NEW_JAR_DIR/$APP_NAME,使用旧jar"fi
}start(){is_existif [ $? -eq 0 ]; thenecho "$APP_NAME is already running. pid=$pid"elsenohup /usr/bin/java -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m \-XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC \-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:gc/gc-$(date +%Y%m%d%H%M%S).log \-jar "$APP_NAME" --spring.profiles.active="$ENV" --jasypt.encryptor.password=Xxzx@0710@ > log 2>&1 &echo "$APP_NAME start success"fi
}stop(){is_existif [ $? -eq 0 ]; thenkill -9 "$pid"echo "$APP_NAME stop success"elseecho "$APP_NAME is not running"fi  
}status(){is_existif [ $? -eq 0 ]; thenecho "$APP_NAME is running. Pid is $pid"elseecho "$APP_NAME is NOT running."fi
}v(){echo "access version 1.0"
}restart(){stopbackup_and_update_jarsleep 1start
}case "$1" in"start")start;;"stop")stop;;"restart")restart;;"status")status;;"-v")v;;*)usage;;
esac

以ruoyi这个项目举例:

单独打包admin时会提示类不存在,尽管这个项目类在。

[ERROR] /D:/workspace/zhengshu/ysb-multiport-manage-control/back-control-admin/src/main/java/com/zs/web/controller/multiport/AppCareController.java:[3,54] 程序包com.baomidou.mybatisplus.core.conditions.query不存在

一开始以为是pom里的打包插件配置的不对,调整了一下,发现还是不行。

建议就配一个跳过test插件和springboot插件就行。

  <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.xx.AdminApplication</mainClass><skip>false</skip> <!-- 此模块需要打包 --></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins><finalName>${project.artifactId}</finalName>

发现不是打包插件问题后,gpt给出了答案:

我平常的构建项目习惯是父pom里使用dependencyManagement标注所有的依赖,然后在子模块里引入对应的,admin基本不依赖什么,都是通过依赖传递使用system的。所以会出现这个问题,引以为戒。

附带一个如果不知道类的依赖由于传递依赖,不知道是实际的哪个坐标引入的命令:

mvn dependency:tree -Dverbose -Dincludes=org.apache.commons:commons-collections4

http://www.xdnf.cn/news/711559.html

相关文章:

  • clickhouse如何查看操作记录,从日志来查看写入是否成功
  • 湖北理元理律师事务所债务优化实践:在还款与生活间寻找平衡支点
  • [NOIP 2001 普及组] 数的计算 Java
  • 高防IP能抗住500G攻击吗?
  • PostgreSQL的聚集函数
  • Nest全栈到失业(三):半小时图书管理系统-User
  • Ubuntu 22.04 上安装 PostgreSQL(使用官方 APT 源)
  • CRMEB 单商户Java版 v2.3公测版发布,欢迎体验!
  • 收集飞花令碎片——C语言(数组+函数)
  • 酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法
  • 小程序为什么要安装SSL安全证书
  • LeetCode 55 45:跳跃游戏与跳跃游戏 II - 贪心算法详解
  • 前端开发中 <> 符号解析问题全解:React、Vue 与 UniApp 场景分析与解决方案
  • 题目 3298: 蓝桥杯2024年第十五届决赛真题-兔子集结
  • WPF log4net用法
  • STM32 AD单通道与多通道实战指南
  • 【QT】理解QT的“元对象系统”
  • 【Tips】关于PCI和PCIe的配置空间差异和io/memory io读写
  • 【CF】Day69——⭐Codeforces Round 897 (Div. 2) D (图论 | 思维 | DFS | 环)
  • Redis--基础知识点--28--慢查询相关
  • 【ConvLSTM第二期】模拟视频帧的时序建模(Python代码实现)
  • CppCon 2014 学习第4天:Transactional Language Constructs for C++ TS(未进入到标准)
  • RDS PostgreSQL手动删除副本集群副本的步骤
  • 58同城C++开发面试题及参考答案
  • OpenCV CUDA模块结构分析与形状描述符------计算指定阶数的矩(Moments)所需的总数量函数:numMoments
  • json转成yolo用的txt(json中没有宽高,需要自设宽高的)
  • Mysql数据库 索引,事务
  • 数据库 | 时序数据库选型
  • 物联网常用协议Modbus、CAN、BACnet介绍
  • UniApp X:鸿蒙原生开发的机会与DCloud的崛起之路·优雅草卓伊凡