初识 Solon —— 进一步的准备

说明

为了简化和统一后续的开发,我们采用多模块的项目结构,引入 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

补充说明写在注释中。

// 将demo,修改名称为porpoise-demo
rootProject.name = "porpoise-demo"

// 创建新模版后自动增加的内容可以不用调整
include 'demo01'
include 'demo-parent'

配置 build.gradle

补充说明写在注释中。

plugins {
    id 'java'
    id "io.freefair.lombok" version "8.11"
}

// 统一 jdk 版本号
def jdkVersion = 17
def demoVersion = "1.0.0"
// processor 的依赖需要指定版本号
def mapstructVersion = "1.6.3"
// processor 的依赖需要指定版本号
def easyQueryVersion = "2.4.14"

group = "com.example.demo"
version "${demoVersion}"

allprojects {
    repositories {
        mavenLocal()
        mavenCentral()
        // 增加腾讯云 maven 仓库镜像,提速。
        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

用于统一管理版本号。

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

补充说明写在注释中。

plugins {
    // 使用 java-platform 可以统一管理 bom
    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并非关键字,可自定义
        maven(MavenPublication) {
            //通过java-platform生成BOM
            from components.javaPlatform
        }
    }

    repositories {
        // 根据需要发布到不同的仓库,此处只是发布到本地
        mavenLocal()
    }
}

配置 demo01

配置 build.gradle

补充说明写在注释中。

plugins {
    id 'java'
    id "io.freefair.lombok"
}

group = "com.example"
// 统一版本号
version "${demoVersion}"
description = "Demo project for Solon"

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of("${jdkVersion}")
    }
}

dependencies {
    // 使用 demo-parent,依赖调整的最主要的位置
    implementation platform(project(":demo-parent"))

    implementation("org.noear:solon-web")
    implementation("org.noear:solon-view-freemarker")
    implementation("org.noear:solon-logging-logback")

    // 删除,已经用插件的方式引入了
    // compileOnly("org.projectlombok:lombok")
    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

日志中出现如下字样,表示项目结构调整成功,可通过浏览器调用进行测试。

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 获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值