说明
为了简化和统一后续的开发,我们采用多模块的项目结构,引入 BOM 来统一管理依赖。本人并不擅长前端,前端不会过多讲解,主要基于 Sysbean Admin,后续的例子也将以对接 Sysbean Admin的接口作为例子进行讲解。
多模块
多模块的配置,可以参看 https://mp.weixin.qq.com/s/qXaZ7BCL_0-1hkqTGNxFmA。
在 IDEA 中通过 File->New->Modules... 可以创建新的模块。
先创建一个demo01的模块,然后把第一应用的文件移动到 demo01中(第一个应用的玩转例子保留在 start-up 的分支)。
之后再创建demo-parent模块,该模块用于统一管理依赖。
修改settings.gradle
补充说明写在注释中。
1 2 3 4 5 6
| rootProject.name = "porpoise-demo"
include 'demo01' include 'demo-parent'
|
配置 build.gradle
补充说明写在注释中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| plugins { id 'java' id "io.freefair.lombok" version "8.11" }
def jdkVersion = 17 def demoVersion = "1.0.0"
def mapstructVersion = "1.6.3"
def easyQueryVersion = "2.4.14"
group = "com.example.demo" version "${demoVersion}"
allprojects { repositories { mavenLocal() mavenCentral() maven { url "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/" } }
ext["jdkVersion"] = "${jdkVersion}" ext["demoVersion"] = "${demoVersion}" ext["mapstructVersion"] = "${mapstructVersion}" ext["easyQueryVersion"] = "${easyQueryVersion}"
tasks.withType(JavaCompile).tap { configureEach { options.encoding = "UTF-8" options.compilerArgs << "-parameters" << "-Xlint:unchecked" << "-Xlint:deprecation" } } }
|
配置 demo-parant
增加dependencies.gradle
用于统一管理版本号。
1 2 3 4 5 6 7 8
| ext { set("solonVersion", "3.0.7") set("esearchxVersion", "1.0.22") set("hikaricpVersion", "5.1.0") set("mysqlVersion", "8.0.28") set("hutoolVersion", "6.0.0-M18") set("transmittableThreadLocalVersion", "2.14.2") }
|
配置 build.gradle
补充说明写在注释中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| plugins { id 'java-platform' id 'maven-publish' }
apply from: "dependencies.gradle"
group 'com.example.demo' version "${demoVersion}"
javaPlatform { allowDependencies() }
dependencies { api platform("org.noear:solon-parent:${solonVersion}") constraints { api("com.zaxxer:HikariCP:${hikaricpVersion}") api("mysql:mysql-connector-java:${mysqlVersion}") api("com.easy-query:sql-solon-plugin:${easyQueryVersion}") api("org.noear:esearchx:${esearchxVersion}") api("org.dromara.hutool:hutool-all:${hutoolVersion}") api("org.mapstruct:mapstruct:${mapstructVersion}") api("com.alibaba:transmittable-thread-local:${transmittableThreadLocalVersion}") } }
publishing { publications { maven(MavenPublication) { from components.javaPlatform } }
repositories { mavenLocal() } }
|
配置 demo01
配置 build.gradle
补充说明写在注释中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| plugins { id 'java' id "io.freefair.lombok" }
group = "com.example"
version "${demoVersion}" description = "Demo project for Solon"
java { toolchain { languageVersion = JavaLanguageVersion.of("${jdkVersion}") } }
dependencies { implementation platform(project(":demo-parent"))
implementation("org.noear:solon-web") implementation("org.noear:solon-view-freemarker") implementation("org.noear:solon-logging-logback")
testImplementation("org.noear:solon-test") }
compileJava { options.encoding = "UTF-8" options.compilerArgs << "-parameters" }
jar { manifest { attributes "Main-Class": "com.example.demo.App" }
dependsOn(configurations.runtimeClasspath)
duplicatesStrategy = DuplicatesStrategy.EXCLUDE from(configurations.runtimeClasspath.collect { if (it.isDirectory()) it else zipTree(it) }) { exclude 'META-INF/MANIFEST.MF' exclude 'META-INF/*.SF' exclude 'META-INF/*.DSA' exclude 'META-INF/*.RSA' }
def sourcesMain = sourceSets.main sourcesMain.allSource.forEach { println("add from sources: ${it.name}") } from(sourcesMain.output) }
|
重新运行demo01
日志中出现如下字样,表示项目结构调整成功,可通过浏览器调用进行测试。
1
| App: End loading elapsed=258ms pid=32912 v=3.0.7
|

技术栈
后端
- JDK 17
- Gradle 8+
- Solon 3.0.7
- Easy-query 2.4.14
- lombok 8.11
- Mapstruct 1.6.3
- Hutool 6.0.0-M18
- MySQL 8+
- Redis 6+
前端
具体参看其官方文档,https://docs.soybeanjs.cn/zh/guide/quick-start 。
- Node 18.19.0+
- pnpm 8.7.0+
- Vue 3
- Vite 4
- TypeScript
小结
将项目调整为多模块结构,增加父BOM,并测试 demo01 可以正常运行,为后续项目的开发做好准备。
完整代码可以从 https://gitee.com/CrazyAirhead/porpoise-demo 获取。