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:
parent
a4aa4b4156
commit
2184dce6a8
@ -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>
|
||||
|
||||
2
pom.xml
2
pom.xml
@ -105,8 +105,6 @@
|
||||
|
||||
<!-- 公共构建配置 - 所有服务模块继承 -->
|
||||
<build>
|
||||
<!-- 输出文件名不带版本号 -->
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<!-- Maven JAR Plugin - 打包普通JAR(排除资源文件) -->
|
||||
<plugin>
|
||||
|
||||
@ -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. 构建ClassPath(lib目录所有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. ClassPath(lib目录所有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
|
||||
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
|
||||
# 启动命令:java -cp lib/* MainClass
|
||||
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -cp "$CLASSPATH" $MAIN_CLASS $CONFIG_OPTS > /dev/null 2>&1 &
|
||||
|
||||
# 保存PID
|
||||
echo $! > $PID_FILE
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user