| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /*
- * Copyright 2019-2021 Mamoe Technologies and contributors.
- *
- * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
- * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
- *
- * https://github.com/mamoe/mirai/blob/master/LICENSE
- */
- @file:Suppress("UnstableApiUsage")
- import org.jetbrains.kotlin.gradle.dsl.*
- import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
- import org.jetbrains.kotlin.utils.addToStdlib.safeAs
- plugins {
- kotlin("jvm") version Versions.kotlinCompiler
- kotlin("plugin.serialization") version Versions.kotlinCompiler
- id("net.mamoe.kotlin-jvm-blocking-bridge") version Versions.blockingBridge apply false
- id("com.gradle.plugin-publish") version "0.12.0" apply false
- //id("com.bmuschko.nexus") version "2.3.1" apply false
- //id("io.codearte.nexus-staging") version "0.11.0" apply false
- }
- tasks.withType(JavaCompile::class.java) {
- options.encoding = "UTF8"
- }
- allprojects {
- group = "net.mamoe"
- repositories {
- mavenLocal()
- jcenter()
- mavenCentral()
- }
- }
- subprojects {
- afterEvaluate {
- apply<MiraiConsoleBuildPlugin>()
- configureJvmTarget()
- configureEncoding()
- configureKotlinExperimentalUsages()
- configureKotlinCompilerSettings()
- configureKotlinTestSettings()
- configureSourceSets()
- }
- }
- extensions.findByName("buildScan")?.withGroovyBuilder {
- setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
- setProperty("termsOfServiceAgree", "yes")
- }
- val experimentalAnnotations = arrayOf(
- "kotlin.Experimental",
- "kotlin.RequiresOptIn",
- "kotlin.ExperimentalUnsignedTypes",
- "kotlin.ExperimentalStdlibApi",
- "kotlin.contracts.ExperimentalContracts",
- "kotlin.time.ExperimentalTime",
- "kotlin.experimental.ExperimentalTypeInference",
- "kotlinx.coroutines.ExperimentalCoroutinesApi",
- "kotlinx.serialization.ExperimentalSerializationApi",
- "kotlin.io.path.ExperimentalPathApi",
- "io.ktor.util.KtorExperimentalAPI",
- "net.mamoe.mirai.utils.MiraiInternalApi",
- "net.mamoe.mirai.utils.MiraiExperimentalApi",
- "net.mamoe.mirai.console.ConsoleFrontEndImplementation",
- "net.mamoe.mirai.console.util.ConsoleExperimentalApi",
- "net.mamoe.mirai.console.util.ConsoleInternalApi"
- )
- fun Project.configureJvmTarget() {
- tasks.withType(KotlinJvmCompile::class.java) {
- kotlinOptions.jvmTarget = "1.8"
- }
- extensions.findByType(JavaPluginExtension::class.java)?.run {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
- }
- }
- fun Project.useIr() {
- tasks {
- withType(KotlinJvmCompile::class.java) {
- kotlinOptions.useIR = true
- }
- }
- }
- fun Project.configureKotlinTestSettings() {
- tasks.withType(Test::class) {
- useJUnitPlatform()
- }
- when {
- isKotlinJvmProject -> {
- dependencies {
- testImplementation(kotlin("test-junit5"))
- testApi("org.junit.jupiter:junit-jupiter-api:${Versions.junit}")
- testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Versions.junit}")
- }
- }
- isKotlinMpp -> {
- kotlinSourceSets?.forEach { sourceSet ->
- if (sourceSet.name == "common") {
- sourceSet.dependencies {
- implementation(kotlin("test"))
- implementation(kotlin("test-annotations-common"))
- }
- } else {
- sourceSet.dependencies {
- implementation(kotlin("test-junit5"))
- implementation("org.junit.jupiter:junit-jupiter-api:${Versions.junit}")
- implementation("org.junit.jupiter:junit-jupiter-engine:${Versions.junit}")
- }
- }
- }
- }
- }
- }
- fun Project.configureKotlinCompilerSettings() {
- val kotlinCompilations = kotlinCompilations ?: return
- for (kotlinCompilation in kotlinCompilations) with(kotlinCompilation) {
- if (isKotlinJvmProject) {
- @Suppress("UNCHECKED_CAST")
- this as KotlinCompilation<KotlinJvmOptions>
- }
- kotlinOptions.freeCompilerArgs += "-Xjvm-default=all"
- }
- }
- fun Project.configureEncoding() {
- tasks.withType(JavaCompile::class.java) {
- options.encoding = "UTF8"
- }
- }
- fun Project.configureSourceSets() {
- val flatten = extra.runCatching { get("flatten.sourceset") }.getOrNull()?.toString()?.toBoolean() ?: true
- if (!flatten) return
- sourceSets {
- findByName("main")?.apply {
- resources.setSrcDirs(listOf(projectDir.resolve("resources")))
- java.setSrcDirs(listOf(projectDir.resolve("src")))
- }
- findByName("test")?.apply {
- resources.setSrcDirs(listOf(projectDir.resolve("resources")))
- java.setSrcDirs(listOf(projectDir.resolve("test")))
- }
- }
- }
- fun Project.configureKotlinExperimentalUsages() {
- val sourceSets = kotlinSourceSets ?: return
- for (target in sourceSets) target.languageSettings.run {
- enableLanguageFeature("InlineClasses")
- progressiveMode = true
- experimentalAnnotations.forEach { a ->
- useExperimentalAnnotation(a)
- }
- }
- }
- val Project.kotlinSourceSets get() = extensions.findByName("kotlin").safeAs<KotlinProjectExtension>()?.sourceSets
- val Project.kotlinTargets
- get() =
- extensions.findByName("kotlin").safeAs<KotlinSingleTargetExtension>()?.target?.let { listOf(it) }
- ?: extensions.findByName("kotlin").safeAs<KotlinMultiplatformExtension>()?.targets
- val Project.isKotlinJvmProject: Boolean get() = extensions.findByName("kotlin") is KotlinJvmProjectExtension
- val Project.isKotlinMpp: Boolean get() = extensions.findByName("kotlin") is KotlinMultiplatformExtension
- val Project.kotlinCompilations
- get() = kotlinTargets?.flatMap { it.compilations }
|