项目环境
IntelliJ IDEA 2023.2.5 (Ultimate Edition)
OpenJDK 8
Gradle 7.6.3
PostgreSQL 15
新建项目
项目配置
修改 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")
}
}
依赖版本控制模块
- 新建模块文件夹
ops-mvndm
- 创建模块配置文件
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父工程的项目就搭建好了。