refactor: 优化打包结构,主JAR放入lib目录并带版本号

- pom.xml: 移除finalName配置,JAR保留版本号
- assembly.xml: 主JAR放入lib目录(useProjectArtifact=true)
- start.sh: 简化启动逻辑
  - ClassPath统一为 lib/*
  - 无需单独匹配主JAR文件名
  - 只需配置MAIN_CLASS即可启动

优势:
- 主JAR带版本号便于版本识别和升级
- 所有JAR统一放lib目录,结构清晰
- 启动脚本更简洁,无需APP_NAME匹配JAR
This commit is contained in:
zhangjf 2026-02-22 20:30:28 +08:00
parent a4aa4b4156
commit 2184dce6a8
3 changed files with 13 additions and 44 deletions

View File

@ -48,21 +48,11 @@
</fileSet>
</fileSets>
<!-- 主JAR文件放到根目录只包含服务代码不包含资源和依赖 -->
<files>
<file>
<source>${project.build.directory}/${project.artifactId}.jar</source>
<outputDirectory>/</outputDirectory>
<destName>${project.artifactId}.jar</destName>
<fileMode>0644</fileMode>
</file>
</files>
<!-- lib目录 - 所有依赖JAR不包含项目自身 -->
<!-- lib目录 - 所有JAR包含项目自身和所有依赖 -->
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<useProjectArtifact>true</useProjectArtifact>
<scope>runtime</scope>
<fileMode>0644</fileMode>
</dependencySet>

View File

@ -105,8 +105,6 @@
<!-- 公共构建配置 - 所有服务模块继承 -->
<build>
<!-- 输出文件名不带版本号 -->
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- Maven JAR Plugin - 打包普通JAR排除资源文件 -->
<plugin>

View File

@ -36,36 +36,24 @@ if [[ -z "${INSTANCE_NAME}" ]] || [[ "${INSTANCE_NAME}" == '\${APP_NAME}' ]]; th
fi
TENANT_ID=${TENANT_ID:-""}
# 4. 主JAR文件路径
JAR_FILE="${APP_HOME}/${APP_NAME}.jar"
if [ ! -f "$JAR_FILE" ]; then
echo "Error: No JAR file found: ${JAR_FILE}"
exit 1
fi
# 5. 主类从service.properties读取或使用默认值
# 4. 主类从service.properties读取必须配置
MAIN_CLASS=${MAIN_CLASS:-""}
if [ -z "$MAIN_CLASS" ]; then
echo "Error: MAIN_CLASS not configured in service.properties"
exit 1
fi
# 6. 构建ClassPathlib目录所有jar + 主jar
# 检查lib目录是否存在
if [ -d "${APP_HOME}/lib" ]; then
# 构建classpath: lib/* + 主JAR
CLASSPATH="${APP_HOME}/lib/*:${JAR_FILE}"
LAUNCH_MODE="classpath"
else
# fallback: fat jar模式向后兼容
CLASSPATH="${JAR_FILE}"
LAUNCH_MODE="fatjar"
# 5. ClassPathlib目录所有jar包括主JAR和依赖
if [ ! -d "${APP_HOME}/lib" ]; then
echo "Error: lib directory not found: ${APP_HOME}/lib"
exit 1
fi
CLASSPATH="${APP_HOME}/lib/*"
# 7. 日志目录使用INSTANCE_NAME区分不同实例
# 6. 日志目录使用INSTANCE_NAME区分不同实例
LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}"
# 8. PID文件路径
# 7. PID文件路径
PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"
# JVM参数可通过环境变量覆盖
@ -104,23 +92,16 @@ echo "Starting ${INSTANCE_NAME}..."
echo " APP_NAME: ${APP_NAME}"
echo " INSTANCE_NAME: ${INSTANCE_NAME}"
echo " APP_HOME: ${APP_HOME}"
echo " JAR_FILE: ${JAR_FILE}"
echo " MAIN_CLASS: ${MAIN_CLASS}"
echo " LAUNCH_MODE: ${LAUNCH_MODE}"
echo " CLASSPATH: ${CLASSPATH}"
echo " LOG_HOME: ${LOG_HOME}"
echo " JAVA_OPTS: ${JAVA_OPTS}"
if [ -n "${TENANT_ID}" ]; then
echo " TENANT_ID: ${TENANT_ID}"
fi
# 根据启动模式选择启动方式
if [ "$LAUNCH_MODE" == "classpath" ]; then
# ClassPath模式java -cp lib/*:app.jar MainClass
# 启动命令java -cp lib/* MainClass
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -cp "$CLASSPATH" $MAIN_CLASS $CONFIG_OPTS > /dev/null 2>&1 &
else
# FatJar模式java -jar app.jar向后兼容
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -jar $JAR_FILE $CONFIG_OPTS > /dev/null 2>&1 &
fi
# 保存PID
echo $! > $PID_FILE