Gradle+SpringCloud学习记录(一)

发布时间 2023-12-31 00:22:10作者: 疑问号?

项目环境

IntelliJ IDEA 2023.2.5 (Ultimate Edition)
OpenJDK 8
Gradle 7.6.3
PostgreSQL 15

新建项目

image

项目配置

修改 settings.gradle.kts 文件

修改 settings.gradle.tks 文件支持多模块

pluginManagement {
    repositories {
        maven("https://plugins.gradle.org/m2/")
        gradlePluginPortal()
    }
}

rootProject.name = "ops-demo"

rootProject.children.forEach { project ->
    project.buildFileName = "${project.name}.gradle.kts"
    project.children.forEach { p ->
        p.buildFileName = "${p.name}.gradle.kts"
    }
}

修改 build.gradle.kts 文件

plugins {
    `maven-publish`
    `java-library`
}

val modules by extra(subprojects.filter { !it.name.endsWith("mvndm") && !it.name.endsWith("bom") })
val mvndm by extra(subprojects.filter { it.name.endsWith("mvndm") || it.name.endsWith("bom") })

configure(allprojects) {
    group = "com.ops.demo"
    version = "1.0.0"

    repositories {
        mavenLocal()
        maven("https://maven.aliyun.com/nexus/content/repositories/google")
        maven("https://maven.aliyun.com/nexus/content/groups/public")
        maven("https://maven.aliyun.com/nexus/content/repositories/jcenter")
        maven("https://mirrors.huaweicloud.com/repository/maven")
        maven("https://mirrors.cloud.tencent.com/nexus/repository/maven-public")
        maven("https://plugins.gradle.org/m2/")
        mavenCentral()
        gradlePluginPortal()
    }

    configurations.all {
        resolutionStrategy {
            cacheChangingModulesFor(0, TimeUnit.SECONDS)
            cacheDynamicVersionsFor(0, TimeUnit.SECONDS)
        }
    }
}

configure(subprojects - mvndm) {
    apply(plugin = "maven-publish")
    apply(plugin = "java-library")
    dependencies {
        api(project(":ops-mvndm"))
    }
    java {
        targetCompatibility = JavaVersion.VERSION_1_8
        sourceCompatibility = JavaVersion.VERSION_1_8
    }
    val javadocJar by tasks.registering(Jar::class) {
        archiveClassifier.set("javadoc")
    }
    val sourceJar by tasks.registering(Jar::class) {
        from(sourceSets["main"].allSource)
        archiveClassifier.set("sources")
    }
    publishing {
        publications {
            create<MavenPublication>("lib") {
                groupId = this@configure.group.toString()
                artifactId = this@configure.name
                version = this@configure.version.toString()
                from(components.getByName("java"))

                artifact(javadocJar)
                artifact(sourceJar)
            }
        }

        // 不配置默认是环境变量中配置的 M2_HOME 的 settings.xml 中配置的路径
        repositories {
            // 环境变量中配置的 M2_HOME 的 settings.xml 中配置的路径。梅有默认 USER_HOME/.m2/repository
            mavenLocal()
//            maven {
//                // 凭证
//                credentials {
//                    username = "username"
//                    password = "password"
//                }
//                // 地址
//                setUrl("https://xx.xx.xx/xxxx/xxx")
//            }
        }
    }

    tasks.test {
        useJUnitPlatform()
    }
}

configure(subprojects - modules) {
    apply {
        plugin("maven-publish")
    }
}

依赖版本控制模块

  1. 新建模块文件夹 ops-mvndm
    image
  2. 创建模块配置文件ops-mvndm.gradle.kts,并配置ops-mvndm模块
description = "统一依赖版本定义"

plugins {
    `java-platform`
}

javaPlatform {
    allowDependencies()
}

ext {
    set("springBootVersion", "2.7.18")
    set("springCloudVersion", "2021.0.8")
    set("springCloudAlibabaVersion", "2021.1")
    set("dubboVersion", "3.2.8")
    set("knife4jVersion", "4.3.0")
    set("lombokVersion", "1.18.30")
    set("hutoolVersion", "5.8.23")
    set("fastjson2Version", "2.0.42")
    set("okhttpVersion", "4.12.0")
    set("easyExcelVersion", "3.3.2")
    set("mysqlVersion", "8.0.33")
    set("lombokVersion", "1.18.30")
    set("mybatisPlusVersion", "3.5.3.2")
    set("jodaTimeVersion", "2.12.5")
    set("xxlJobVersion", "2.4.0")
    set("springdocVersion", "1.7.0")
    set("postgresqlVersion", "42.7.0")
    set("mybatisFlexVersion", "1.7.5")
    set("mybatisFlexKotlinVersion", "1.0.3")
    set("hikariVersion", "4.0.3")
    set("mybatisTypeHandlersVersion", "1.0.2")
}

dependencies {
    api(platform("org.springframework.boot:spring-boot-dependencies:${project.ext["springBootVersion"]}"))
    api(platform("org.springframework.cloud:spring-cloud-dependencies:${project.ext["springCloudVersion"]}"))
    api(platform("com.alibaba.cloud:spring-cloud-alibaba-dependencies:${project.ext["springCloudAlibabaVersion"]}"))
    api(platform("org.apache.dubbo:dubbo-bom:${project.ext["dubboVersion"]}"))
    api(platform("org.apache.dubbo:dubbo-dependencies-zookeeper-curator5:${project.ext["dubboVersion"]}"))
    api(platform("com.github.xiaoymin:knife4j-dependencies:${project.ext["knife4jVersion"]}"))
    api(platform("com.mybatis-flex:mybatis-flex-dependencies:${project.ext["mybatisFlexVersion"]}"))
    constraints {
        api("cn.hutool:hutool-all:${project.ext["hutoolVersion"]}")
        api("com.alibaba.fastjson2:fastjson2:${project.ext["fastjson2Version"]}")
        api("com.squareup.okhttp3:okhttp:${project.ext["okhttpVersion"]}")
        api("com.alibaba:easyexcel:${project.ext["easyExcelVersion"]}")
        api("com.mysql:mysql-connector-j:${project.ext["mysqlVersion"]}")
        api("org.projectlombok:lombok:${project.ext["lombokVersion"]}")
        api("com.baomidou:mybatis-plus-boot-starter:${project.ext["mybatisPlusVersion"]}")
        api("joda-time:joda-time:${project.ext["jodaTimeVersion"]}")
        api("com.xuxueli:xxl-job-core:${project.ext["xxlJobVersion"]}")
        api("org.springdoc:springdoc-openapi-ui:${project.ext["springdocVersion"]}")
        runtime("org.postgresql:postgresql:${project.ext["postgresqlVersion"]}")
        api("com.zaxxer:HikariCP:${project.ext["hikariVersion"]}")
        api("com.mybatis-flex:mybatis-flex-kotlin-extensions:${project.ext["mybatisFlexKotlinVersion"]}")
        api("com.mybatis-flex:mybatis-flex-processor:${project.ext["mybatisFlexVersion"]}")
        api("org.mybatis:mybatis-typehandlers-jsr310:${project.ext["mybatisTypeHandlersVersion"]}")
    }
}

publishing {
    publications {
        create<MavenPublication>("bom") {
            groupId = "${project.group}"
            artifactId = "${project.name}-bom"
            version = "${project.version}"
            println(groupId)
            println(artifactId)
            println(version)
            from(components.getByName("javaPlatform"))

            pom {
                packaging = "pom"
                name.set("${project.name}-bom")
                description.set("BOM 依赖版本定义")

                developers {
                    developer {
                        name.set("Anbuis")
                        email.set("1577123083@qq.com")
                        roles.set(listOf("Java Development Engineer", "Kotlin Development Engineer"))
                    }
                }
            }
        }
    }
}

此时,ops-mvndm模块下会新增发布依赖版本定义的bom类型的pom文件。此文件可以给maven项目使用。
到此,一个功能上类似maven父工程的项目就搭建好了。