feat: 优化打包方式为普通JAR+依赖分离
- pom.xml: - 添加finalName配置去除版本号 - maven-jar-plugin排除资源文件 - 禁用spring-boot-maven-plugin repackage - 各服务移除冗余的plugin配置 - assembly.xml: - 主JAR放根目录(仅服务代码) - lib目录放依赖JAR - start.sh: - 支持java -cp classpath模式启动 - 从service.properties读取MAIN_CLASS - 向后兼容fat jar模式 - service.properties: - 所有服务添加MAIN_CLASS配置 优势: - 主JAR从131MB缩小到103KB - 多服务部署可共享lib目录 - 资源文件外置便于修改
This commit is contained in:
parent
b8044c3769
commit
a4aa4b4156
@ -48,7 +48,7 @@
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
|
||||
<!-- 主JAR文件放到根目录(Spring Boot fat jar已包含所有依赖) -->
|
||||
<!-- 主JAR文件放到根目录(只包含服务代码,不包含资源和依赖) -->
|
||||
<files>
|
||||
<file>
|
||||
<source>${project.build.directory}/${project.artifactId}.jar</source>
|
||||
@ -57,4 +57,14 @@
|
||||
<fileMode>0644</fileMode>
|
||||
</file>
|
||||
</files>
|
||||
|
||||
<!-- lib目录 - 所有依赖JAR(不包含项目自身) -->
|
||||
<dependencySets>
|
||||
<dependencySet>
|
||||
<outputDirectory>lib</outputDirectory>
|
||||
<useProjectArtifact>false</useProjectArtifact>
|
||||
<scope>runtime</scope>
|
||||
<fileMode>0644</fileMode>
|
||||
</dependencySet>
|
||||
</dependencySets>
|
||||
</assembly>
|
||||
|
||||
@ -70,14 +70,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-cust
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.cust.CustApplication
|
||||
|
||||
# 实例名称(多租户场景使用,留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -62,14 +62,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-exp
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.exp.ExpApplication
|
||||
|
||||
# 实例名称(多租户场景使用,留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -68,14 +68,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-file
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.file.FileApplication
|
||||
|
||||
# 实例名称(留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -73,14 +73,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-gateway
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.gateway.GatewayApplication
|
||||
|
||||
# 实例名称(多租户场景使用,留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -62,14 +62,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-proj
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.proj.ProjApplication
|
||||
|
||||
# 实例名称(多租户场景使用,留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -62,14 +62,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-receipt
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.receipt.ReceiptApplication
|
||||
|
||||
# 实例名称(多租户场景使用,留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -67,14 +67,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-report
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.report.ReportApplication
|
||||
|
||||
# 实例名称(留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -62,14 +62,7 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称
|
||||
APP_NAME=fund-req
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.req.ReqApplication
|
||||
|
||||
# 实例名称(多租户场景使用,留空则默认等于APP_NAME)
|
||||
INSTANCE_NAME=
|
||||
|
||||
|
||||
@ -109,15 +109,6 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Spring Boot Maven Plugin -->
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Maven Assembly Plugin - 打包为tar.gz -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
# 服务名称(对应JAR文件名,用于Nacos服务注册)
|
||||
APP_NAME=fund-sys
|
||||
|
||||
# 主类(启动入口)
|
||||
MAIN_CLASS=com.fundplatform.sys.SysApplication
|
||||
|
||||
# 实例名称(多租户场景使用,留空则默认等于APP_NAME)
|
||||
# 多租户示例:fund-sys-shared, fund-sys-vip001
|
||||
INSTANCE_NAME=
|
||||
|
||||
40
pom.xml
40
pom.xml
@ -103,4 +103,44 @@
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
<!-- 公共构建配置 - 所有服务模块继承 -->
|
||||
<build>
|
||||
<!-- 输出文件名不带版本号 -->
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<!-- Maven JAR Plugin - 打包普通JAR(排除资源文件) -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<classpathPrefix>lib/</classpathPrefix>
|
||||
</manifest>
|
||||
</archive>
|
||||
<!-- 排除资源文件,资源文件通过assembly打包到conf目录 -->
|
||||
<excludes>
|
||||
<exclude>**/*.yml</exclude>
|
||||
<exclude>**/*.yaml</exclude>
|
||||
<exclude>**/*.properties</exclude>
|
||||
<exclude>**/*.xml</exclude>
|
||||
<exclude>**/*.json</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Spring Boot Maven Plugin - 禁用repackage,生成普通JAR -->
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<!-- 禁用repackage,不生成fat jar -->
|
||||
<skip>true</skip>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
@ -36,29 +36,36 @@ if [[ -z "${INSTANCE_NAME}" ]] || [[ "${INSTANCE_NAME}" == '\${APP_NAME}' ]]; th
|
||||
fi
|
||||
TENANT_ID=${TENANT_ID:-""}
|
||||
|
||||
# 4. JAR文件路径(优先查找根目录的主JAR,再查找lib目录)
|
||||
# Spring Boot fat jar已包含所有依赖,主JAR在根目录
|
||||
# 4. 主JAR文件路径
|
||||
JAR_FILE="${APP_HOME}/${APP_NAME}.jar"
|
||||
if [ ! -f "$JAR_FILE" ]; then
|
||||
# fallback: 查找lib目录(兼容旧版打包结构)
|
||||
JAR_FILE=$(ls ${APP_HOME}/lib/${APP_NAME}*.jar 2>/dev/null | head -1)
|
||||
fi
|
||||
if [ ! -f "$JAR_FILE" ]; then
|
||||
# 最后尝试: lib目录任意jar(向后兼容)
|
||||
JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1)
|
||||
fi
|
||||
if [ -z "$JAR_FILE" ] || [ ! -f "$JAR_FILE" ]; then
|
||||
echo "Error: No JAR file found for ${APP_NAME}"
|
||||
echo " Searched: ${APP_HOME}/${APP_NAME}.jar"
|
||||
echo " Searched: ${APP_HOME}/lib/${APP_NAME}*.jar"
|
||||
echo " Searched: ${APP_HOME}/lib/*.jar"
|
||||
echo "Error: No JAR file found: ${JAR_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 5. 日志目录(使用INSTANCE_NAME区分不同实例)
|
||||
# 5. 主类(从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"
|
||||
fi
|
||||
|
||||
# 7. 日志目录(使用INSTANCE_NAME区分不同实例)
|
||||
LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}"
|
||||
|
||||
# 6. PID文件路径
|
||||
# 8. PID文件路径
|
||||
PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"
|
||||
|
||||
# JVM参数(可通过环境变量覆盖)
|
||||
@ -98,13 +105,22 @@ 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 " LOG_HOME: ${LOG_HOME}"
|
||||
echo " JAVA_OPTS: ${JAVA_OPTS}"
|
||||
if [ -n "${TENANT_ID}" ]; then
|
||||
echo " TENANT_ID: ${TENANT_ID}"
|
||||
fi
|
||||
|
||||
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -jar $JAR_FILE $CONFIG_OPTS > /dev/null 2>&1 &
|
||||
# 根据启动模式选择启动方式
|
||||
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
|
||||
|
||||
# 保存PID
|
||||
echo $! > $PID_FILE
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user