宝兰德 BES AppServer 内嵌部署方案(可执行 JAR)
适用工程:
jeecg-bootJeecgBoot:3.9.3,Spring Boot:4.1.0,JDK:17
BES:11.0-SP5-BN001.001,BES Spring Boot Starter:4.x(其 POM 基于 Spring Boot 4.0.6)
部署方式:可执行 JAR,使用 BES 替换 Spring Boot 默认内嵌 Web 容器
一、解压 BES Spring Boot 依赖包
将宝兰德提供的压缩包解压到一个不含中文的目录。本文以 Windows 为例,假设解压后的目录为:
C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT
进入该目录后应能看到宝兰德原包自带的以下文件和目录:
lib:BES JAR 包;poms:对应的 Maven POM;installlib.bat:将全部 BES 依赖安装到本机 Maven 仓库;installlib.sh:Linux 安装脚本;deploylib.bat、deploylib.sh:发布到 Maven 私服的脚本,本地验证不使用;patch:补丁说明。
本文只使用宝兰德原包自带的 installlib.bat,不需要创建或修改安装脚本。
二、检查 Java 和 Maven 环境
打开一个新的 PowerShell 窗口,执行:
java -version
mvn -version

检查结果应满足:
java -version的主版本为 17;mvn -version能正常输出 Maven 版本;mvn -version中的 Java version 也是 17。
如果提示“mvn 不是内部或外部命令”,需要先配置 Maven 环境变量,再重新打开 PowerShell:
MAVEN_HOME = Maven 解压目录
Path 增加 = %MAVEN_HOME%\bin
如需指定 Maven 本地仓库,可编辑 Maven 安装目录下的 conf/settings.xml,在 <settings> 内配置:
<localRepository>D:\maven</localRepository>
该配置是可选的;未配置时,Maven 默认使用 %USERPROFILE%\.m2\repository。
三、运行宝兰德原厂安装脚本
确认 mvn -version 正常后,在 PowerShell 中执行:
Set-Location -LiteralPath 'C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT'
cmd.exe /c installlib.bat
两条命令需要分别执行。必须先进入 BES 解压目录,因为原厂脚本通过当前目录查找 lib 和 poms。
脚本会依次安装 13 个 BES 组件。每个组件都应输出:
info: install com.bes.appserver:组件名称:11.0-SP5-BN001.001 success.
- 示意图

如果出现 failed,打开 BES 解压目录下的 install.log,以日志中最后一个 [ERROR] 为准排查。不要继续修改 JeecgBoot 的 POM。
四、修改 JeecgBoot 启动模块
编辑文件:
jeecg-module-system/jeecg-system-start/pom.xml
在 <dependencies> 内增加:
<!-- 宝兰德 BES AppServer Spring Boot 4 内嵌容器 -->
<dependency>
<groupId>com.bes.appserver</groupId>
<artifactId>bes-lite-spring-boot-4.x-starter</artifactId>
<version>11.0-SP5-BN001.001</version>
</dependency>

1、排除传递依赖中的 Tomcat
BES 用来替换 Spring Boot 默认内嵌 Tomcat。为避免最终可执行 JAR 同时包含两套 Servlet 容器,需要在启动模块引用的 jeecg-system-biz 和 jeecg-module-demo 依赖中排除 spring-boot-starter-tomcat:
<!-- SYSTEM 系统管理模块 -->
<dependency>
<groupId>org.jeecgframework.boot3</groupId>
<artifactId>jeecg-system-biz</artifactId>
<version>${jeecgboot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- DEMO 示例模块 -->
<dependency>
<groupId>org.jeecgframework.boot3</groupId>
<artifactId>jeecg-module-demo</artifactId>
<version>${jeecgboot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
排除应写在启动模块,不修改 jeecg-boot-base-core 公共模块,避免影响其他启动方式。
Spring Boot 4 的启动模块还引入了 spring-boot-starter-webmvc-test。该测试 starter 会传递引入 Tomcat,也需要增加排除:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

因此启动模块一共需要在三处排除 spring-boot-starter-tomcat:jeecg-system-biz、jeecg-module-demo、spring-boot-starter-webmvc-test。
2、为 Tomcat 专用配置增加生效条件
JeecgBoot 的 jeecg-system-biz 中存在以下 Tomcat 专用配置类:
src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java
排除 Tomcat 后,需要增加 ConditionalOnClass,保证只有类路径中存在 Tomcat 时才加载该配置:
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@Configuration
@ConditionalOnClass(name = "org.apache.catalina.connector.Connector")
public class TomcatFactoryConfig {

3、License 说明
BES 属于商业应用服务器,启动时需要加载与产品版本匹配的 License。本次使用宝兰德提供的 SpringBoot License:
C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT\bes.11.0_SpringBoot.lic.txt
JeecgBoot 采用内嵌方式启动时,将该文件复制到启动模块的 resources 目录,并将目标文件名统一改为 bes.lic.txt。请在 D:\jeecg-project\jeecg-boot-framework 项目根目录执行:
Copy-Item -LiteralPath 'C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT\bes.11.0_SpringBoot.lic.txt' `
-Destination '.\jeecg-module-system\jeecg-system-start\src\main\resources\bes.lic.txt'
该命令只复制 License,不会修改下载目录中的原文件。检查目标文件是否存在:
Test-Path -LiteralPath '.\jeecg-module-system\jeecg-system-start\src\main\resources\bes.lic.txt'
返回 True 后,需要重新执行后文的 Maven 打包命令。旧 JAR 是在加入 License 之前生成的,直接启动旧 JAR 仍会提示找不到有效 License。
打包完成后,可以检查 License 是否已经进入启动 JAR:
jar tf '.\jeecg-module-system\jeecg-system-start\target\jeecg-system-start-3.9.3.jar' |
Select-String 'BOOT-INF/classes/bes.lic.txt'
正常情况下应输出:
BOOT-INF/classes/bes.lic.txt
License 文件属于授权材料,请勿提交到公开代码仓库,也不要在文档、日志或截图中展示文件内容。如果仍提示 License 过期或不匹配,需要向宝兰德确认该 License 是否适用于
BES-APPSERVER-SPRINGBOOT-11.0-SP5-BN001.001。
五、检查 JeecgBoot 的 Maven 依赖
在项目根目录执行:
Set-Location -LiteralPath 'JeecgBoot 后端工程根目录'
mvn `
-pl jeecg-module-system/jeecg-system-start `
-am `
-DskipTests `
dependency:tree `
"-Dincludes=com.bes.appserver:*"
预期依赖树至少包含:
com.bes.appserver:bes-lite-spring-boot-4.x-starter:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-core:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-annotations-api:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-el:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-websocket:jar:11.0-SP5-BN001.001

如果提示 Could not find artifact com.bes.appserver...,回到第二步重新安装,并检查 install.log。
六、打包
仍在项目根目录执行。必须使用 clean package,避免上一次打包遗留的 Tomcat JAR 继续留在 target 中:
mvn `
-pl jeecg-module-system/jeecg-system-start `
-am `
-DskipTests `
clean package
打包成功后,可执行 JAR 位于:
jeecg-module-system\jeecg-system-start\target\jeecg-system-start-3.9.3.jar
八、启动验证
启动前保证 Jeecg 当前 profile 所需的 MySQL、Redis 等服务可访问。首次建议在前台运行,便于观察日志:
java -jar jeecg-system-start-3.9.3.jar
判断接入成功不能只看 Jeecg 的 Started JeecgSystemApplication,还应在启动日志中确认出现 BES、BES AppServer、BesWebServer 或宝兰德版本信息,并且不要出现 Tomcat 已启动的信息。

- 登录成功页面

- 系统用户页面
