正式开发
本文档将以开发【岗位管理】功能为例,详细介绍如何基于 ContiNew Admin 框架进行实际业务开发,展示完整的基础 CRUD 功能实现流程。
本篇文档所涉及 IDE 及版本
后端 IDE:IntelliJ IDEA 2025.1.4.1 (Ultimate Edition)
前端 IDE:WebStorm 2025.1.4.1
版本确认
在开始项目开发前,请确保您下载的是 ContiNew Admin 稳定版而非开发版(dev 分支)。开发版可能包含不稳定的功能特性,未经全面测试,不建议作为生产项目开发模板。
请选择 最新稳定版分支(推荐,对应 v4.0.0 版本的维护分支) 或 下载最新稳定版源码 进行开发。
开源平台 | 后端最新稳定版 | 前端最新稳定版 |
---|---|---|
GitCode | continew-admin/releases | continew-admin-ui/releases |
Gitee | continew-admin/releases | continew-admin-ui/releases |
GitHub | continew-admin/releases | continew-admin-ui/releases |
温馨提示
演示环境基于 dev 分支自动构建,其中部分功能可能为预览版,尚未在稳定版中发布。若您能持续跟进更新,也可以使用 dev 分支,但请注意:
- 新版本开发初期和末期,dev 分支通常较为稳定
- 开发中期,dev 分支可能会有较大变动,请谨慎使用
准备工作
使用脚手架项目时,除了修改项目名称外,还需要进行一些准备工作,如删除无关代码及配置,个性化配置:如包名、Logo 等品牌元素。
后端配置
删除无关内容
根据实际业务需要删除无关目录、模块和业务代码。
continew-admin
├─ continew-server(打包部署模块)
├─ continew-system(系统管理模块,存放系统管理相关业务功能,例如:部门管理、角色管理、用户管理等)
├─ continew-plugin(插件模块,存放能力开放、租户等扩展模块,后续会进行插件化改造)
│ ├─ continew-plugin-open(能力开放插件模块)
│ ├─ continew-plugin-tenant(租户插件模块)
│ ├─ continew-plugin-schedule(任务调度插件模块)
│ ├─ continew-plugin-generator(代码生成器插件模块)
│ └─ pom.xml
├─ continew-common(公共模块,存放公共工具类,公共配置等)
├─ continew-extension(扩展模块)
│ ├─ continew-extension-schedule-server(任务调度服务端模块,实际开发时如果是公司统一提供环境,可直接删除本模块)
│ └─ pom.xml
├─ .github(GitHub 相关配置目录,实际开发时直接删除)
├─ .image(截图目录,实际开发时直接删除)
├─ .style(代码格式、License文件头相关配置目录,实际开发时根据需要取舍,删除时注意删除 /pom.xml 中的 spotless 插件配置)
├─ .gitignore(Git 忽略文件相关配置文件)
├─ docker(项目部署相关配置目录,实际开发时可备份后直接删除)
├─ LICENSE(开源协议文件)
├─ CHANGELOG.md(更新日志文件,实际开发时直接删除)
├─ README.md(项目 README 文件,实际开发时替换为真实内容)
├─ lombok.config(Lombok 全局配置文件)
└─ pom.xml(包含版本锁定及全局插件相关配置)
删除 continew-admin/pom.xml
中的格式化插件配置和 Sonar 扫描配置。
<!-- 代码格式化插件 -->
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>apply</goal>
</goals>
</execution>
</executions>
<configuration>
<java>
<removeUnusedImports/>
<eclipse>
<file>.style/p3c-codestyle.xml</file>
</eclipse>
<licenseHeader>
<file>.style/license-header</file>
</licenseHeader>
</java>
</configuration>
</plugin>
<profiles>
<!-- Sonar 代码质量分析 -->
<profile>
<id>sonar</id>
<properties>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.organization>charles7c</sonar.organization>
<sonar.projectKey>Charles7c_continew-admin</sonar.projectKey>
<sonar.moduleKey>${project.groupId}:${project.artifactId}</sonar.moduleKey>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sonar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
修改项目模块与包名
通过 IDE 对项目模块和包名进行重命名,完成后需同步更新 continew-server/pom.xml
中 <properties>
节点的 <main-class>
打包配置。
修改 Banner
编辑 continew-server/.../resources/banner.txt
文件内容,可通过 在线工具 生成个性化 Banner。
____ _ _ _ _ _ _ _
/ ___| ___ _ __ | |_ (_)| \ | | ___ __ __ / \ __| | _ __ ___ (_) _ __
| | / _ \ | '_ \ | __|| || \| | / _ \\ \ /\ / /_____ / _ \ / _` || '_ ` _ \ | || '_ \
| |___| (_) || | | || |_ | || |\ || __/ \ V V /|_____|/ ___ \| (_| || | | | | || || | | |
\____|\___/ |_| |_| \__||_||_| \_| \___| \_/\_/ /_/ \_\\__,_||_| |_| |_||_||_| |_|
修改控制台启动输出
编辑 continew-server/.../java/.../ContiNewAdminApplication
类,调整控制台启动输出内容。
修改应用信息
编辑 continew-server/.../resources/config/application.yml
文件中的【应用配置】部分。其他环境配置文件(如 application-prod.yml)中的【应用配置】也需同步修改。
温馨提示
- 若项目未开源,可删除 【许可协议信息配置】 部分
- 项目中 90% 的品牌元素已集中到 【应用配置】 中,修改此处即可统一更新大部分品牌信息
- 代码中通过注入
top.continew.starter.core.autoconfigure.application.ApplicationProperties
获取全局应用配置 - 其他 Spring Boot 配置也通过
${}
引用了部分应用配置,例如${application.base-package}
--- ### 应用配置
application:
id: continew-admin
# 名称
name: ContiNew Admin
# 描述
description: 持续迭代优化的前后端分离中后台管理系统框架,开箱即用,持续提供舒适的开发体验。
# 版本
version: 4.0.0
starter: 2.13.4
# 基本包
base-package: top.continew.admin
## 作者信息配置
contact:
name: Charles7c
email: charles7c@126.com
url: https://charles7c.top
## 许可协议信息配置
license:
name: Apache-2.0
url: https://github.com/continew-org/continew-admin/blob/dev/LICENSE
其他配置
在 continew-server/.../resources/config
目录下,系统已默认提供三类配置文件,分别用于不同环境和场景:
application.yml
:项目全局配置文件(所有环境共用的基础配置)application-dev.yml
:开发环境专用配置文件application-prod.yml
:生产环境专用配置文件
系统默认使用开发环境配置(在 application.yml
中指定)。您可根据实际需求进行以下操作:
- 修改现有配置文件中的参数值
- 添加新的环境配置文件(例如:
application-test.yml
用于测试环境)
注意: 新增环境配置文件后,请务必同步修改
logback-spring.xml
中的日志配置,以确保日志系统正常工作。
前端配置
删除无关内容
根据实际业务需要删除无关目录、模块和业务代码。
continew-admin-ui
├─ config # Vite 插件配置
├─ public # 公共静态资源(favicon.ico、logo.svg)
├─ src
│ └─ router
│ └─ route.ts (静态路由配置,实际开发时删除其中【关于项目】的路由配置)
├─ .env.development # 开发环境配置
├─ .env.production # 生产环境配置
├─ .env.test # 测试环境配置
├─ eslint.config.js # ESLint 配置
├─ index.html
├─ package.json
├─ package-lock.json
├─ pnpm-lock.yaml
├─ tsconfig.json
├─ vite.config.ts
├─ .gitignore(Git 忽略文件相关配置文件)
├─ .github(GitHub 相关配置目录,实际开发时直接删除)
├─ .image(截图目录,实际开发时直接删除)
├─ .vscode(VSCode 配置目录)
├─ LICENSE(开源协议文件)
├─ CHANGELOG.md(更新日志文件,实际开发时直接删除)
└─ README.md(项目 README 文件,实际开发时替换为真实内容)
请查阅 前端手册/移除代码 移除百度统计及广告代码。
修改 package.json
编辑 continew-admin-ui/package.json
文件,更新其中的【项目配置】信息。
修改控制台启动输出
编辑 continew-admin-ui/config/plugins/app-info.ts
文件,调整控制台启动输出内容。
修改 settings.json
编辑 continew-admin-ui/src/config/settings.json
文件,调整其中的【页面布局及高级配置】。(建议在系统中通过可视化进行主题配置,配置完成后复制配置到该文件)
修改品牌元素
启动前后端项目后,打开【系统管理】->【系统配置】页面,修改品牌元素(名称、Logo、版权声明等)。
温馨提示
品牌信息存储于 sys_option
(参数表)中,也可直接在数据表中修改。若通过非页面操作修改配置,需手动清理相关 Redis 缓存。
其他配置
在 continew-admin-ui
根目录下,系统已默认提供两种环境的配置文件:
.env.development
:开发环境配置示例.env.production
:生产环境配置示例
项目启动和构建命令默认关联对应的环境配置:pnpm dev
命令默认使用开发环境配置,pnpm build
命令默认使用生产环境配置。
若需根据实际需求调整配置,您可以:
- 修改现有的环境配置文件
- 添加新的环境配置文件(例如:
.env.test
用于测试环境)
注意: 添加新环境配置文件后,请同步更新
package.json
中的scripts
配置,确保新环境能够被正确使用。
新建模块
新建模块
准备工作完成后,开始开发【岗位管理】功能。为方便演示新模块的创建及使用,将该功能划分到【continew-demo】模块。
右键单击项目名称,依次选择【新建】->【模块】
在弹出的【新建模块】窗口中,依次输入项目信息
配置模块依赖
在
continew-admin/pom.xml
中进行版本锁定,使内部模块间依赖时无需标明版本号在
continew-server/pom.xml
中引入新增模块(continew-server
为最终打包部署模块)在
continew-demo/pom.xml
中引入公共模块,并参考其他模块修改模块信息xml<dependencies> <!-- 公共模块(存放公共工具类,公共配置等) --> <dependency> <groupId>top.continew.admin</groupId> <artifactId>continew-common</artifactId> </dependency> </dependencies>
新建数据表
根据需求设计岗位管理数据表,并在目标数据库中创建该表。
CREATE TABLE IF NOT EXISTS `sys_post` (
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) NOT NULL COMMENT '名称',
`description` varchar(200) DEFAULT NULL COMMENT '描述',
`sort` int NOT NULL DEFAULT 999 COMMENT '排序',
`status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态(1:启用;2:禁用)',
`create_user` bigint(20) NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户ID',
PRIMARY KEY (`id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`),
INDEX `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='岗位表';
代码生成
创建数据表后,启动前后端项目,登录系统后,点击【代码生成】菜单,检查列表中是否存在 sys_post
岗位表记录。
生成配置
点击 sys_post
岗位表记录的【配置】按钮,在弹出的配置对话框中,依次完成生成配置和字段配置,设置完成后点击【确定】按钮关闭对话框。
预览及生成
点击 sys_post
岗位表记录的【生成】按钮,在弹出的预览对话框中可查看、复制生成的代码,或直接点击【下载】按钮将代码保存到本地。
将生成的前、后端代码分别放入对应项目中。
温馨提示
- 目前代码生成功能主要用于生成主体框架结构,前端代码可能需要参考其他模块进行调整
- 如遇使用问题,可优化代码生成模板,欢迎提交 PR 贡献改进
添加路由
在目标数据库执行菜单 sql
脚本,初始化路由数据。
清理菜单缓存
重新启动前后端项目,点击【系统管理】目录中的【菜单管理】,进入菜单管理页面。点击【清理缓存】按钮,清理全局菜单缓存。
清理完后,刷新网页,即可看到新增的菜单项。
验证功能
进入【岗位管理】页面,点击【新增】按钮,添加岗位信息进行功能验证。
根据需要修改
至此,【岗位管理】已初步开发完成,您可根据实际需求进行进一步完善和调整。
- 调整菜单图标、上级菜单
- 调整表单项样式
开发建议
实际开发中,建议多参考已有模块的代码风格、组件使用方式和代码规范。待熟悉项目结构后,再进行更大规模的调整,形成团队专属的开发规范。
友情提示
🎉 恭喜你!你已经掌握了 ContiNew Admin 项目开发流程!你的操作也太“丝滑”了!如果这个过程中遇到了未知错误,你也确认自己操作无误的话,可以在常见问题中先找找看。
项目每增长一颗 star,可以给维护者们注入莫大的激情,诚恳的希望您能动动发财的小手,为 ContiNew Admin 点亮一颗小星星。
常见问题
项目 dev 分支可以直接用来开发吗?
不建议直接使用 dev 分支进行开发。dev 分支作为开发分支,可能包含未完成的重构内容或未经代码审核与功能测试的 PR,稳定性较低,出现问题的概率较高。若当前已处于版本开发后期,且您有足够精力跟进后续升级,可考虑使用。
在目录下只添加了一个菜单,目录不显示
这是 GiDemo(ContiNew Admin v3.x-v4.x 所用前端模板) 中的默认配置:当目录下只有一个菜单时,会直接显示菜单而不展示目录层级。如需恢复单菜单的目录层级展示,可通过回滚此提交实现:目录下仅有一个菜单时平铺展示。
相关处理代码可查阅:continew-admin-ui/src/layout/components/Menu/MenuItem.vue
代码生成器生成的代码和预期有差距
本问题仅针对生成效果与预期有差距的情况(若代码生成完全不可用,请先排查操作是否正确)。
项目代码生成器基于 Freemarker 模板 + 配置数据渲染生成,生成效果取决于模板(ftl)的完善程度和场景判断精细度。从项目设计角度,代码生成器的核心目标是 减少样板化代码编写 。对于普通单页面 CRUD 功能,它已能节省 80% 以上的编码时间,您只需调整样式并添加业务逻辑即可完成开发。对于较复杂的页面,建议参考已有页面代码进行修改,相比无代码生成器时需编写大量样板类和文件,这种方式已大幅简化开发流程。
简言之,当前代码生成器可生成大部分样板化代码,但细节仍需您参考已有页面自行调整。
随着用户需求增长,我们计划在 5.x 版本中优先强化代码生成功能,具体优化方向包括:
- 配置流程步骤化,跳转至配置页进行详细设置
- 支持父级模型选择
- 支持弹窗类型(抽屉/对话框)选择
- 在现有排序功能基础上,支持字段增减
- 增加新增表单与更新表单的区分示例
- 关联枚举与数据类型合并
- 支持选择 CRUD API 类型及鉴权配置
- 尝试支持主子表场景
若您对这些优化方向感兴趣,欢迎交流意见或参与 PR 完善。
开发业务代码时,编译后源代码文件头部自动生成 ContiNew License 协议头
需修改 continew-admin/pom.xml
中的代码格式化插件配置:
- 移除
<licenseHeader>
相关配置 - 删除
continew-admin/.style/license-header
文件
若无需使用代码格式化插件,可直接移除整个插件配置并删除 continew-admin/.style
目录。
<build>
<!-- 代码格式化插件 -->
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>apply</goal>
</goals>
</execution>
</executions>
<configuration>
<java>
<removeUnusedImports/>
<eclipse>
<file>.style/p3c-codestyle.xml</file>
</eclipse>
<licenseHeader> // [!code --]
<file>.style/license-header</file> // [!code --]
</licenseHeader> // [!code --]
</java>
</configuration>
</plugin>
</build>
在根目录执行 mvn compile 命令正常,但在单个子模块执行时报错 Could not find resource '.style/p3c-codestyle.xml'
此问题源于代码格式化插件配置的路径问题。插件在顶级项目中配置,且 p3c-codestyle.xml
使用相对路径,子模块继承配置后无法找到该文件。
解决方法如下:
- 将插件配置中的
p3c-codestyle.xml
路径定义为属性变量,在各子模块中覆盖该属性 - 在每个子模块中单独配置代码格式化插件,并指定正确的相对路径
- 移除代码格式化插件,改为在 IDE 中手动导入
p3c-codestyle.xml
配置(具体方法可自行搜索)
目前项目暂未优化此问题,主要因为本项目开发中通常采用整体编译方式,且上述解决方案均存在一定复杂度。后续我们将探索更优雅的解决方式,例如:CheckStyle。
<build>
<!-- 代码格式化插件 -->
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>apply</goal>
</goals>
</execution>
</executions>
<configuration>
<java>
<removeUnusedImports/>
<eclipse>
<file>.style/p3c-codestyle.xml</file>
</eclipse>
<licenseHeader>
<file>.style/license-header</file>
</licenseHeader>
</java>
</configuration>
</plugin>
</build>
实际开发后,项目怎么跟进升级到最新版本?
Continew Admin 项目包含两部分核心内容:
- Starter 中的通用配置和组件能力
- Admin 本体中的通用业务代码
Admin 本体是一个代码模板,提供了项目基础架构和通用业务代码。下载后,您可基于现有代码和规范开发专属业务。由于业务代码的独特性,Admin 本体不存在直接更新的概念。
若您发现已有代码存在 Bug,或 Admin 项目更新中修复了相关 Bug,可查看对应提交记录,参考修改您项目中的对应部分代码。
对于 Starter 部分,由于已发布至 Maven 中央仓库,您可像升级其他外部依赖(如 Spring、Hutool 等)一样直接更新版本。建议升级前参考 Admin 本体项目中关于 Starter 版本升级的提交记录。
关于框架升级的详细说明,请查看《框架升级》。