> 特别说明:源码、JDK、MySQL、Redis、Nacos、Seata、Sentinel等安装或存放路径禁止包含中文、空格、特殊字符等
## 一 技术栈
- 编辑语言:`Java8/11`、`Java17/21`
- 开发框架:`Spring Cloud 2021/2023`+ `Spring Cloud Alibaba 2021/2023` + `Spring Boot 2.7/3.2`
- 持久层框架:`MyBatis-Plus`
- 数据库连接池:`Alibaba Druid`
- 多数据源:`Dynamic-Datasource`
- 数据库兼容: `MySQL`、`SQLServer`、`Oracle`、`PostgreSQL`、`达梦数据库`、`人大金仓数据库`
- 分库分表解决方案:`Apache ShardingSphere`
- 服务网关:`Spring Cloud Gateway`
- 服务注册&发现和配置中心: `Alibaba Nacos`
- 服务监控:`Spring Boot Admin`
- 服务消费(调用):`Spring Cloud OpenFeign`、`Apache Dubbo`
- 负载均衡:`Spring Cloud Loadbalancer`
- 服务熔断&降级&限流:`Alibaba Sentinel`
- 分布式事务:`Apache Seata`
- 链路追踪:`Apache SkyWalking`
- 消息队列:使用`Spring Cloud Stream`,兼容`Apache RocketMQ`、`RabittMQ`、`Apache Kafka`
- 权限认证框架:`Sa-Token` + `JWT`
- 代码生成器:`MyBatis-Plus-Generator`
- 流程引擎:`Flowable` 6.7
- 模板引擎:`Velocity`
- 任务调度:`XXL-JOB`
- 分布式锁:`Lock4j`
- JSON序列化: `Jackson&Fastjson`
- 缓存数据库:`Redis`
- 校验框架:`Validation`
- 分布式文件存储:兼容 `MinIO` 及多个云对象存储,如`阿里云 OSS`、`华为云 OBS`、`七牛云 Kodo`、`腾讯云 COS等`
- 工具类框架:`Hutool`、`Lombok`
- Api文档生成工具:`Knife4j`
- 项目构建:`Maven`
- 日志中心:`ELK`
- 监控告警解决方案:`Prometheus`、`Grafana`、`Alertmanager`
## 二 环境要求
### 2.1 开发环境
| 类目 | 版本或建议 |
|--------|---------------|
| 电脑配置 | 开发电脑建议使用I3及以上CPU,32G及以上内存 |
| 操作系统 | Windows 10/11,MacOS |
| JDK | 默认使用JDK 21,如需要切换JDK 8/11/17版本请参考文档调整代码,推荐使用 `OpenJDK`,如 `Liberica JDK`、`Eclipse Temurin`、`Alibaba Dragonwell`、`BiSheng` 等发行版; |
| Maven | 依赖管理工具,推荐使用 `3.6.3` 及以上版本 |
| Redis | 数据缓存,推荐使用 `5.0` 及以上版本 |
| 数据库 | 兼容 `MySQL 5.7.x/8.x`、`SQLServer 2012+`、`Oracle 11g`、`PostgreSQL 12+`、`达梦数据库(DM8)`、`人大金仓数据库(KingbaseES_V8R6)` |
| IDE | 代码集成开发环境,推荐使用 `IDEA2024` 及以上版本,兼容 `Eclipse`、 `Spring Tool Suite` 等IDE工具 |
| 文件存储 | 默认使用本地存储,兼容 `MinIO` 及多个云对象存储,如 `阿里云 OSS`、`华为云 OBS`、`七牛云 Kodo`、`腾讯云 COS` 等; |
| Nacos | `v2.4.3`, 服务注册&发现和配置中心 |
| Seata | `v2.2.0`,分布式事务 |
| Sentinel(可选) | `v1.8.5`, 服务熔断 |
| Spring Boot Admin(可选) | `2.7.16`,服务监控 |
| SkyWalking APM(可选) | `v10.x`, 链路追踪 |
| SkyWalking Agent (可选) | `v9.3.0`|
| 消息中间件 | 默认使用 `Apache RocketMQ`,兼容 `RabittMQ` 或 `Apache Kafka` |
| ELK(适配) | 日志中心 |
| Prometheus(适配) | 分布式监控、告警 |
| Alertmanager(适配) | 分布式监控、告警 |
| Grafana(适配) | 分布式监控、告警 |
### 2.2 运行环境
> 适用于测试或生产环境
| 类目 | 版本或建议 |
|------|------------|
| 硬件 | 建议至少在 `4C/32G/50G` 的机器配置下运行;|
| 操作系统 | 建议使用 `Windows Server 2019` 及以上版本或主流 `Linux` 发行版本,推荐使用 `Linux` 环境;兼容 `统信UOS`,`OpenEuler`,`麒麟服务器版` 等信创环境; |
| JRE | 默认使用JRE 21,如需要切换JRE 8/11/17版本请参考文档调整代码;推荐使用 `OpenJDK`,如 `Liberica JDK`、`Eclipse Temurin`、`Alibaba Dragonwell`、`BiSheng` 等发行版; |
| Redis | 数据缓存,推荐使用 `5.0` 及以上版本 |
| 数据库 | 兼容 `MySQL 5.7.x/8.x`、`SQLServer 2012+`、`Oracle 11g`、`PostgreSQL 12+`、`达梦数据库(DM8)`、`人大金仓数据库(KingbaseES_V8R6)` |
| 文件存储 | 默认使用本地存储,兼容 `MinIO` 及多个云对象存储,如 `阿里云 OSS`、`华为云 OBS`、`七牛云 Kodo`、`腾讯云 COS` 等; |
| Nacos | `v2.4.3`, 服务注册&发现和配置中心 |
| Seata(可选) | `v2.2.0`,分布式事务 |
| Sentinel(可选) | `v1.8.5`, 服务熔断 |
| Spring Boot Admin(可选) | `2.7.16`,服务监控 |
| SkyWalking APM(可选) | `v10.x`, 链路追踪 |
| SkyWalking Agent (可选) | `v9.3.0`|
| 消息中间件 | 默认使用 `Apache RocketMQ`,兼容 `RabittMQ` 或 `Apache Kafka` |
| ELK(适配) | 日志中心 |
| Prometheus(适配) | 分布式监控、告警 |
| Alertmanager(适配) | 分布式监控、告警 |
| Grafana(适配) | 分布式监控、告警 |
## 三 IDEA插件
- `Lombok`(必需)
- `Alibaba Java Coding Guidelines`
- `MybatisX`
## 四 Maven私服配置
> 建议使用 Apache Maven 3.6.3 及以上版本
以解决依赖无法从公共Maven仓库下载的问题
通过官方私服下载依赖完成后,由于IDEA的缓存可能会出现部分报红,重启IDEA即可
打开Maven安装目录中的 `conf/settings.xml` 文件,
在 `` 中添加如下内容
```xml
maven-releases
jnpf-user
HLrQ0MA%S1nE
maven-snapshots
jnpf-user
HLrQ0MA%S1nE
```
在 `` 中添加
```xml
maven-snapshots
*
maven-snapshots
https://repository.jnpfsoft.com/repository/maven-public/
```
## 五 配套项目
### 5.1 微服务中间件
| 项目 | 分支 | 说明 |
| --- |----------------------| --- |
| jnpf-registry | v5.2.x-stable | 中间件项目 |
| jnpf-nacos-plugin | v2.4.1-plugin-stable | Nacos插件项目源码-适配MySQL、SQLServer、Oracle、PostgreSQL、达梦数据库(DM8)、人大金仓数据库 |
### 5.2 后端项目
| 项目 | 分支 | 说明 |
| --- |---------------|-------------------|
| jnpf-common | v6.0.x-stable | Java基础依赖项目源码 |
| jnpf-datareport | v6.0.x-stable | 报表后端项目源码 |
| jnpf-file-core-starter | v6.0.x-stable | 文件基础依赖项目源码 |
| jnpf-file-preview | v6.0.x-stable | 本地文档预览项目源码 |
| jnpf-java-datareport-univer | v6.0.x-stable | Java Univer报表源码 |
| jnpf-java-datareport-univer-core | v6.0.x-stable | Java Univer报表核心依赖源码,不同销售版本交付有所差异,以实际交付为准 |
| jnpf-java-tenant | v6.0.x-stable | 多租户后端项目源码,不同销售版本交付有所差异,以实际交付为准 |
| jnpf-scheduletask | v6.0.x-stable | 任务调度客户端依赖及服务端项目源码 |
| jnpf-workflow | v1.0.0-stable | 流程引擎后端项目 |
| jnpf-workflow-core | v1.0.0-stable | Flowable流程引擎基础依赖,不同销售版本交付有所差异,以实际交付为准 |
### 5.3 前端项目
| 项目 | 分支 | 说明 |
| --- | --- | --- |
| jnpf-web-datareport | v6.0.x-stable | 报表前端项目源码 |
| jnpf-web-datascreen-vue3 | v6.0.x-stable | 前端大屏项目源码(Vue3) |
| jnpf-web-tenant-vue3 | v6.0.x-stable | 多租户前端项目源码(Vue3),不同销售版本交付有所差异,以实际交付为准 |
| jnpf-web-monorepo | v6.0.x-stable | 前端主项目源码(Vue3),不同销售版本交付有所差异,以实际交付为准 |
| jnpf-web-monorepo-bpmn | v6.0.x-stable | 前端主项目源码(Vue3),不含流程设计器、不含Univer报表设计器前端源代码,不同销售版本交付有所差异,以实际交付为准 |
| jnpf-bpmn | v1.0.x-stable | 前端流程设计器源代码,不同销售版本交付有所差异,以实际交付为准 |
| jnpf-univer | v1.0.x-stable | 前端Univer报表设计器源代码,不同销售版本交付有所差异,以实际交付为准 |
### 5.4 移动端
| 项目 | 分支 | 说明 |
| --- | --- | --- |
| jnpf-app-vue3 | v6.0.x-stable | 移动端项目源码(Vue3) |
### 5.5 静态资源
| 项目 | 分支 | 说明 |
| --- | --- | --- |
| jnpf-resources |v6.0.x-stable | 静态资源 |
### 5.6 数据库
| 项目 | 分支 | 说明 |
| --- | --- | --- |
| jnpf-database | v6.0.x-stable | 数据库脚本或文件 |
## 六 服务端口说明
> 在保证端口不冲突的情况下,可根据实际场景调整端口
| 服务名称 | 默认端口 | 描述 |
| --- | --- | --- |
| jnpf-gateway | 30000 | 服务网关 |
| jnpf-oauth | 30001 | 认证服务 |
| jnpf-system | 30002 | 系统基础服务 |
| jnpf-visualdev | 30003 | 可视化开发(在线开发、代码生成、门户设计) |
| jnpf-workflow | 30004 | 工作流 |
| jnpf-file | 30005 | 文件服务 |
| jnpf-message | 30008 | 消息中心 |
| jnpf-scheduletask | 30009 | 任务调度(客户端) |
| jnpf-permission | 30010 | 权限服务 |
| jnpf-visualdata | 30011 | 数据大屏服务 |
| jnpf-app | 30012 | 移动端服务 |
| jnpf-extend | 30019 | 开发示例 |
| jnpf-example | 30100 | 服务模板(参考示例) |
## 七 开发环境
### 7.1 导入数据库脚本
> 以 MySQL数据库为例
字符集:`utf8mb4`
排序规则:`utf8mb4_general_ci`
#### 7.1.1 创建Nacos配置库
在MySQL中创建 `jnpf_nacos` 数据库,并将 `jnpf-database/Java微服务/jnpf_nacos_mysql.sql` 导入
更多使用场景详见 `jnpf-registry/nacos-server/README.md` 文档说明
#### 7.1.2 创建平台数据库
在MySQL中创建 `jnpf_init` 数据库,并将 `jnpf-database/MySQL/jnpf_db_init.sql` 导入。
若需要使用纯净数据库(不含Demo示例),则以【新建查询】方式导入 `jnpf_dbnull_init.sql` 。
若有更新脚本(Update目录下),按日期顺序执行更新
#### 7.1.3 创建系统调度数据库
在MySQL中创建 `jnpf_xxjob` 数据库,并将 `jnpf-database/MySQL/jnpf_xxjob_init.sql` 导入。
#### 7.1.4 创建流程引擎数据库
在MySQL中创建 `jnpf_flow` 数据库,并将 `jnpf-database/MySQL/jnpf_flow_init.sql` 导入。
### 7.2 导入依赖
#### 7.2.1 基础依赖
详见 `jnpf-common` 项目中的 `README.md` 文档说明
#### 7.2.2 文件基础依赖
详见 `jnpf-file-starter` 项目中的 `README.md` 文档说明
#### 7.2.3 导入系统调度服务端
详见 `jnpf-scheduletask` 项目中的 `README.md` 文档说明
### 7.3 配套项目
#### 7.3.1 jnpf-datareport 报表后端项目
详见 `jnpf-datareport` 项目中的 `README.md` 文档说明
#### 7.3.2 jnpf-java-datareport-univer Java Univer报表后端项目
详见 `jnpf-java-datareport-univer` 项目中的 `README.md` 文档说明
#### 7.3.3 jnpf-workflow 工作流引擎后端项目
详见 `jnpf-workflow` 项目中的 `README.md` 文档说明
#### 7.3.4 jnpf-java-tenant 多租户后端项目
> 可选,如有多租户需求
详见 `jnpf-java-tenant` 项目中的 `README.md` 文档说明
### 7.4 项目配置
#### 7.4.1 jnpf-app
##### 7.4.1.1 端口配置
打开编辑 `/jnpf-app/jnpf-app-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30012
```
##### 7.4.1.2 服务配置
打开编辑 `/jnpf-app/jnpf-app-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 17 行)
- Nacos密码:spring.cloud.nacos.password (第 18 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 21 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace(第 22 行)
#### 7.4.2 jnpf-extend
> 此服务需要用到 Seata 中间件
##### 7.4.2.1 端口配置
打开编辑 `/jnpf-extend/jnpf-extend-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30019
```
##### 7.4.2.2 服务配置
打开编辑 `/jnpf-extend/jnpf-extend-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 17 行)
- Nacos密码:spring.cloud.nacos.password (第 18 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 21 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 22 行)
#### 7.4.3 jnpf-file
##### 7.4.3.1 端口配置
打开编辑 `/jnpf-file/jnpf-file-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30005
```
##### 7.4.3.2 服务配置
打开编辑 `/jnpf-file/jnpf-file-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 17 行)
- Nacos密码:spring.cloud.nacos.password (第 18 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 21 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 22 行)
#### 7.4.4 jnpf-workflow
##### 7.4.4.1 端口配置
打开编辑 `/jnpf-flowable/jnpf-flowable-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30004
```
##### 7.4.4.2 服务配置
打开编辑 `/jnpf-flowable/jnpf-flowable-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 11 行)
- Nacos密码:spring.cloud.nacos.password (第 12 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 15 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 16 行)
#### 7.4.5 jnpf-gateway
##### 7.4.5.1 端口配置
打开编辑 `/jnpf-gateway/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30000
```
##### 7.4.5.2 服务配置
打开编辑 `/jnpf-gateway/src/main/resources/bootstrap-dev.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 5 行)
- Nacos用户名:spring.cloud.nacos.username (第 11 行)
- Nacos密码:spring.cloud.nacos.password (第 12 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 15 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 16 行)
#### 7.4.6 jnpf-message
> 此服务需要用到消息中间件,默认使用 `Apache RocketMQ`,登录Nacos控制台修改 `mq.yaml` 配置
##### 7.4.6.1 端口配置
打开编辑 `/jnpf-message/jnpf-message-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30008
```
##### 7.4.6.2 服务配置
打开编辑 `/jnpf-message/jnpf-message-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 17 行)
- Nacos密码:spring.cloud.nacos.password (第 18 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 21 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 22 行)
- stream配置:spring.cloud.stream.rocketmq.binder.name-server (第 56 行)
- stream配置(group):spring.cloud.stream.rocketmq.bindings.output.producer.group (第 59 行)
#### 7.4.7 jnpf-oauth
##### 7.4.7.1 端口配置
打开编辑 `/jnpf-oauth/jnpf-oauth-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30001
```
##### 7.4.7.2 服务配置
打开编辑 `/jnpf-oauth/jnpf-oauth-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 5 行)
- Nacos用户名:spring.cloud.nacos.username (第 18 行)
- Nacos密码:spring.cloud.nacos.password (第 19 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 22 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 23 行)
#### 7.4.8 jnpf-permission
##### 7.4.8.1 端口配置
打开编辑 `/jnpf-permission/jnpf-permission-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30010
```
##### 7.4.8.2 服务配置
打开编辑 `/jnpf-permission/jnpf-permission-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 17 行)
- Nacos密码:spring.cloud.nacos.password (第 18 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 21 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 22 行)
#### 7.4.9 jnpf-scheduletask
##### 7.4.9.1 端口配置
打开编辑 `/jnpf-scheduletask/jnpf-scheduletask-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30009
```
##### 7.4.9.2 服务配置
打开编辑 `/jnpf-scheduletask/jnpf-scheduletask-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 15 行)
- Nacos密码:spring.cloud.nacos.password (第 16 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 19 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 20 行)
#### 7.4.10 jnpf-system
##### 7.4.10.1 端口配置
打开编辑 `/jnpf-system/jnpf-system-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30002
```
##### 7.4.10.2 服务配置
打开编辑 `/jnpf-system/jnpf-system-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 22 行)
- Nacos密码:spring.cloud.nacos.password (第 23 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 26 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 27 行)
#### 7.4.11 jnpf-visualdata
##### 7.4.11.1 端口配置
打开编辑 `/jnpf-visualdata/jnpf-visualdata-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30011
```
##### 7.4.11.2 服务配置
打开编辑 `/jnpf-visualdata/jnpf-visualdata-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 17 行)
- Nacos密码:spring.cloud.nacos.password (第 18 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 21 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 22 行)
#### 7.4.12 jnpf-visualdev
##### 7.4.12.1 端口配置
打开编辑 `/jnpf-visualdev/jnpf-visualdev-server/src/main/resources/application.yml`
```yaml
server:
tomcat:
uri-encoding: UTF-8
port: 30003
```
##### 7.4.12.2 服务配置
打开编辑 `/jnpf-visualdev/jnpf-visualdev-server/src/main/resources/bootstrap.yml`,主要涉及如下配置
- 应用名称:spring.application.name (第 4 行)
- Nacos用户名:spring.cloud.nacos.username (第 22 行)
- Nacos密码:spring.cloud.nacos.password (第 23 行)
- Nacos地址:spring.cloud.nacos.discovery.server-addr (第 26 行)
- Nacos命名空间:spring.cloud.nacos.discovery.namespace (第 27 行)
### 7.5 Nacos配置
详见 `jnpf-registry` 项目中 `/nacos-server/README.md` 文档说明
## 八 项目启动
### 8.1 注意事项
> 若使用JDK9及以上版本,所有服务启动需要添加如下VM启动参数(不区分先后顺序)
```bash
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED
--add-opens=java.base/java.math=ALL-UNNAMED
--add-opens=java.base/sun.net.util=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
--add-opens=java.base/java.net=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED
--add-opens=java.base/java.security=ALL-UNNAMED
--add-opens=java.base/java.text=ALL-UNNAMED
--add-opens=java.base/java.time=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/jdk.internal.module=ALL-UNNAMED
--add-opens=java.base/sun.security.util=ALL-UNNAMED
```
### 8.2 jnpf-app
启动类:`/jnpf-app/jnpf-app-server/src/main/java/jnpf/JnpfApplication`
### 8.3 jnpf-extend
启动类:`/jnpf-extend/jnpf-extend-server/src/main/java/jnpf/JnpfExtendApplication`
### 8.4 jnpf-file
启动类:`/jnpf-file/jnpf-file-server/src/main/java/jnpf/JnpfFileAplication`
### 8.5 jnpf-workflow
启动类:`/jnpf-flowable/jnpf-flowable-server/src/main/java/jnpf/JnpfFlowableApplication.java`
### 8.6 jnpf-gateway
启动类:`/jnpf-gateway/src/main/java/jnpf/JnpfGatewayApplication.java`
### 8.7 jnpf-message
启动类:`/jnpf-message/jnpf-message-server/src/main/java/jnpf/JnpfMessageApplication.java`
### 8.8 jnpf-oauth
启动类:`/jnpf-oauth/jnpf-oauth-server/src/main/java/jnpf/JnpfOauthApplication.java`
### 8.9 jnpf-permission
启动类:`/jnpf-permission/jnpf-permission-server/src/main/java/jnpf/JnpfPermissionApplication.java`
### 8.10 jnpf-scheduletask
启动类:`/jnpf-scheduletask/jnpf-scheduletask-server/src/main/java/jnpf/JnpfScheduleTaskApplication.java`
### 8.11 jnpf-system
启动类:`/jnpf-system/jnpf-system-server/src/main/java/jnpf/JnpfSystemApplication.java`
### 8.12 jnpf-visualdata
启动类:`/jnpf-visualdata/jnpf-visualdata-server/src/main/java/jnpf/JnpfVisualdataApplication.java`
### 8.13 jnpf-visualdev
启动类:`/jnpf-visualdev/jnpf-visualdev-server/src/main/java/jnpf/JnpfVisualdevApplication.java`
## 九 项目发布
> jar发布方式
- 在 `IDEA` 右侧 `Maven` > `jnpf-java-cloud` > `Lifecycle` 中双击 `clean` 清理下项目
- 双击 `package` 打包项目
- 完成打包后各个服务的包路径如下:
- jnpf-app/jnpf-app-server/target/jnpf-app-6.0.0-RELEASE.jar
- jnpf-extend/jnpf-extend-server/target/jnpf-extend-6.0.0-RELEASE.jar
- jnpf-file/jnpf-file-server/target/jnpf-file-6.0.0-RELEASE.jar
- jnpf-flowable/jnpf-flowable-server/target/jnpf-flowable-6.0.0-RELEASE.jar
- jnpf-gateway/target/jnpf-gateway-6.0.0-RELEASE.jar
- jnpf-message/jnpf-message-server/target/jnpf-message-6.0.0-RELEASE.jar
- jnpf-oauth/jnpf-oauth-server/target/jnpf-oauth-6.0.0-RELEASE.jar
- jnpf-permission/jnpf-permission-server/target/jnpf-permission-6.0.0-RELEASE.jar
- jnpf-scheduletask/jnpf-scheduletask-server/target/jnpf-scheduletask-6.0.0-RELEASE.jar
- jnpf-system/jnpf-system-server/target/jnpf-system-6.0.0-RELEASE.jar
- jnpf-visualdata/jnpf-visualdata-server/target/jnpf-visualdata-6.0.0-RELEASE.jar
- jnpf-visualdev/jnpf-visualdev-server/target/jnpf-visualdev-6.0.0-RELEASE.jar
- 依次将得到的 `jar` 包上传至服务器部署
- 启动脚本(参考)
> 若使用 JDK/JRE 9及以上版本运行,需要在启动脚本中增加参数:`--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/sun.net.util=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/jdk.internal.module=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED`
以 `jnpf-app` 以例
**若使用 JDK/JRE 8 运行**
```bash
java -Xms300m -Xmx300m -Dfile.encoding=utf-8 -jar jnpf-app-6.0.0-RELEASE.jar -> log.log
```
**若使用 JDK/JRE 9及以上版本运行**
```bash
java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/sun.net.util=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/jdk.internal.module=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED -Xms300m -Xmx300m -Dfile.encoding=utf-8 -jar jnpf-app-6.0.0-RELEASE.jar -> log.log
```
## 十 接口文档
- `http://localhost:30000/doc.html`