特别说明:源码、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 - 流程引擎:
Flowable6.7 - 模板引擎:
Velocity - 任务调度:
XXL-JOB - 分布式锁:
Lock4j - JSON序列化:
Jackson&Fastjson - 缓存数据库:
Redis - 校验框架:
Validation - 分布式文件存储:兼容
MinIO及多个云对象存储,如阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS等 - 工具类框架:
Hutool、Lombok - Api文档生成工具:
Knife4j - 项目构建:
Maven - 日志中心:
ELK - 监控告警解决方案:
Prometheus、Grafana、Alertmanager
| 类目 | 版本或建议 |
|---|---|
| 电脑配置 | 开发电脑建议使用I3及以上CPU,32G及以上内存 |
| 操作系统 | Windows 10/11,MacOS |
| JDK | 默认使用JDK 21,兼容JDK 8/11、JDK17,推荐使用 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(适配) | 分布式监控、告警 |
适用于测试或生产环境
| 类目 | 版本或建议 |
|---|---|
| 硬件 | 建议至少在 4C/32G/50G的机器配置下运行; |
| 操作系统 | 建议使用 Windows Server 2019 及以上版本或主流 Linux 发行版本,推荐使用 Linux 环境;兼容 统信UOS,OpenEuler,麒麟服务器版 等信创环境; |
| JRE | 默认使用JRE 21,兼容JRE 8/11、JRE17;推荐使用 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(适配) | 分布式监控、告警 |
Lombok(必需)Alibaba Java Coding GuidelinesMybatisX
Apache Maven 3.6.3及以上版本
解决依赖无法从公共Maven仓库下载的问题
打开Maven安装目录中的 conf/settings.xml 文件,
在 <servers></servers> 中添加如下内容
<server>
<id>maven-releases</id>
<username>jnpf-user</username>
<password>HLrQ0MA%S1nE</password>
</server>
<server>
<id>maven-snapshots</id>
<username>jnpf-user</username>
<password>HLrQ0MA%S1nE</password>
</server>在 <mirrors></mirrors> 中添加
<mirror>
<id>maven-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>maven-snapshots</name>
<url>https://repository.jnpfsoft.com/repository/maven-public/</url>
</mirror>| 项目 | 分支 | 说明 |
|---|---|---|
| 微服务中间件 | ||
| jnpf-registry | v5.2.x-stable | 中间件项目 |
| jnpf-nacos-plugin | v2.4.1-plugin-stable | Nacos插件项目源码-适配MySQL、SQLServer、Oracle、PostgreSQL、达梦数据库(DM8)、人大金仓数据库 |
| 后端 | ||
| jnpf-common | v5.2.x-stable | java基础依赖项目源码 |
| jnpf-datareport | v5.2.x-stable | 报表后端项目源码 |
| jnpf-file-core-starter | v5.2.x-stable | 文件基础依赖项目源码 |
| jnpf-file-preview | v5.2.x-stable | 本地文档预览项目源码 |
| jnpf-java-datareport-univer | v5.2.x-stable | Java Univer报表源码 |
| jnpf-java-datareport-univer-core | v5.2.x-stable | Java Univer报表核心依赖源码,不同销售版本交付有所差异,具体实际交付为准 |
| jnpf-java-tenant | v5.2.x-stable | 多租户后端项目源码,不同销售版本交付有所差异,具体实际交付为准 |
| jnpf-scheduletask | v5.2.x-stable | 任务调度客户端依赖及服务端项目源码 |
| jnpf-workflow | v1.0.0-stable | 流程引擎后端项目 |
| jnpf-workflow-core | v1.0.0-stable | Flowable流程引擎基础依赖,不同销售版本交付有所差异,具体实际交付为准 |
| 前端 | ||
| jnpf-web-datareport | v5.2.x-stable | 报表前端项目源码 |
| jnpf-web-datascreen-vue3 | v5.2.x-stable | 大屏前端项目源码(Vue3) |
| jnpf-web-tenant-vue3 | v5.2.x-stable | 多租户前端项目源码(Vue3),不同销售版本交付有所差异,具体实际交付为准 |
| jnpf-web-vue3 | v5.2.x-stable | 前端主项目源码(Vue3) |
| 移动端 | ||
| jnpf-app-vue3 | v5.2.x-stable | 移动端项目源码(Vue3) |
| 静态资源 | ||
| jnpf-resources | v5.2.x-stable | 静态资源 |
| 数据库 | ||
| jnpf-database | v5.2.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 | 服务模板(参考示例) |
以 MySQL数据库 为例
字符集:utf8mb4
排序规则:utf8mb4_general_ci
在MySQL中创建 jnpf_nacos 数据库,并将 jnpf-database/Java微服务/jnpf_nacos_mysql.sql 导入
更多使用场景详见 jnpf-registry/nacos-server/README.md 文档说明
在MySQL中创建 jnpf_init 数据库,并将 jnpf-database/MySQL/jnpf_db_init.sql 导入。
若需要使用纯净数据库(不含Demo示例),则以【新建查询】方式导入 jnpf_dbnull_init.sql 。
若有更新脚本(Update目录下),按日期顺序执行更新
在MySQL中创建 jnpf_xxjob 数据库,并将 jnpf-database/MySQL/jnpf_xxjob_init.sql 导入。
在MySQL中创建 jnpf_flow 数据库,并将 jnpf-database/MySQL/jnpf_flow_init.sql 导入。
详见 jnpf-common 项目中的 README.md 文档说明
详见 jnpf-file-starter 项目中的 README.md 文档说明
详见 jnpf-scheduletask 项目中的 README.md 文档说明
详见 jnpf-datareport 项目中的 README.md 文档说明
详见 jnpf-java-datareport-univer 项目中的 README.md 文档说明
详见 jnpf-workflow 项目中的 README.md 文档说明
可选,如有多租户需求
详见 jnpf-java-tenant 项目中的 README.md 文档说明
打开编辑 /jnpf-app/jnpf-app-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30012打开编辑 /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 行)
此服务需要用到 Seata 中间件
打开编辑 /jnpf-extend/jnpf-extend-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30019打开编辑 /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 行)
打开编辑 /jnpf-file/jnpf-file-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30005打开编辑 /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 行)
打开编辑 /jnpf-flowable/jnpf-flowable-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30004打开编辑 /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 行)
打开编辑 /jnpf-gateway/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30000打开编辑 /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 行)
此服务需要用到消息中间件,默认使用
Apache RocketMQ,登录Nacos控制台修改mq.yaml配置
打开编辑 /jnpf-message/jnpf-message-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30008打开编辑 /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 行)
打开编辑 /jnpf-oauth/jnpf-oauth-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30001打开编辑 /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 行)
打开编辑 /jnpf-permission/jnpf-permission-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30010打开编辑 /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 行)
打开编辑 /jnpf-scheduletask/jnpf-scheduletask-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30009打开编辑 /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 行)
打开编辑 /jnpf-system/jnpf-system-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30002打开编辑 /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 行)
打开编辑 /jnpf-visualdata/jnpf-visualdata-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30011打开编辑 /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 行)
打开编辑 /jnpf-visualdev/jnpf-visualdev-server/src/main/resources/application.yml
server:
tomcat:
uri-encoding: UTF-8
port: 30003打开编辑 /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 行)
详见 jnpf-registry 项目中 /nacos-server/README.md 文档说明
若使用JDK9及以上版本,所有服务启动需要添加如下VM启动参数(不区分先后顺序)
--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/jnpf-app-server/src/main/java/jnpf/JnpfApplication
启动类:/jnpf-extend/jnpf-extend-server/src/main/java/jnpf/JnpfExtendApplication
启动类:/jnpf-file/jnpf-file-server/src/main/java/jnpf/JnpfFileAplication
启动类:/jnpf-flowable/jnpf-flowable-server/src/main/java/jnpf/JnpfFlowableApplication.java
启动类:/jnpf-gateway/src/main/java/jnpf/JnpfGatewayApplication.java
启动类:/jnpf-message/jnpf-message-server/src/main/java/jnpf/JnpfMessageApplication.java
启动类:/jnpf-oauth/jnpf-oauth-server/src/main/java/jnpf/JnpfOauthApplication.java
启动类:/jnpf-permission/jnpf-permission-server/src/main/java/jnpf/JnpfPermissionApplication.java
启动类:/jnpf-scheduletask/jnpf-scheduletask-server/src/main/java/jnpf/JnpfScheduleTaskApplication.java
启动类:/jnpf-system/jnpf-system-server/src/main/java/jnpf/JnpfSystemApplication.java
启动类:/jnpf-visualdata/jnpf-visualdata-server/src/main/java/jnpf/JnpfVisualdataApplication.java
启动类:/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-5.0.0-RELEASE.jar
- jnpf-extend/jnpf-extend-server/target/jnpf-extend-5.0.0-RELEASE.jar
- jnpf-file/jnpf-file-server/target/jnpf-file-5.0.0-RELEASE.jar
- jnpf-flowable/jnpf-flowable-server/target/jnpf-flowable-5.0.0-RELEASE.jar
- jnpf-gateway/target/jnpf-gateway-5.0.0-RELEASE.jar
- jnpf-message/jnpf-message-server/target/jnpf-message-5.0.0-RELEASE.jar
- jnpf-oauth/jnpf-oauth-server/target/jnpf-oauth-5.0.0-RELEASE.jar
- jnpf-permission/jnpf-permission-server/target/jnpf-permission-5.0.0-RELEASE.jar
- jnpf-scheduletask/jnpf-scheduletask-server/target/jnpf-scheduletask-5.0.0-RELEASE.jar
- jnpf-system/jnpf-system-server/target/jnpf-system-5.0.0-RELEASE.jar
- jnpf-visualdata/jnpf-visualdata-server/target/jnpf-visualdata-5.0.0-RELEASE.jar
- jnpf-visualdev/jnpf-visualdev-server/target/jnpf-visualdev-5.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 运行
java -Xms300m -Xmx300m -Dfile.encoding=utf-8 -jar jnpf-app-5.0.0-RELEASE.jar -> log.log若使用 JDK/JRE 9及以上版本运行
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-5.0.0-RELEASE.jar -> log.loghttp://localhost:30000/doc.html