build.gradle.kts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*
  2. * Copyright 2019-2023 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/dev/LICENSE
  8. */
  9. @file:Suppress("UnstableApiUsage", "UNUSED_VARIABLE", "NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
  10. import org.jetbrains.dokka.base.DokkaBase
  11. import org.jetbrains.dokka.base.DokkaBaseConfiguration
  12. import java.time.LocalDateTime
  13. buildscript {
  14. repositories {
  15. if (System.getProperty("use.maven.local") == "true") {
  16. mavenLocal()
  17. }
  18. mavenCentral()
  19. gradlePluginPortal()
  20. google()
  21. }
  22. dependencies {
  23. classpath("com.android.tools.build:gradle:${Versions.androidGradlePlugin}")
  24. classpath("org.jetbrains.kotlinx:atomicfu-gradle-plugin:${Versions.atomicFU}")
  25. classpath("org.jetbrains.dokka:dokka-base:${Versions.dokka}")
  26. }
  27. }
  28. plugins {
  29. kotlin("jvm") apply false // version Versions.kotlinCompiler
  30. kotlin("plugin.serialization") version Versions.kotlinCompiler apply false
  31. id("com.google.osdetector")
  32. id("org.jetbrains.dokka") version Versions.dokka
  33. id("me.him188.kotlin-jvm-blocking-bridge") version Versions.blockingBridge
  34. id("me.him188.kotlin-dynamic-delegation") version Versions.dynamicDelegation apply false
  35. id("me.him188.maven-central-publish") version Versions.mavenCentralPublish apply false
  36. id("com.gradle.plugin-publish") version "1.0.0-rc-3" apply false
  37. id("org.jetbrains.kotlinx.binary-compatibility-validator") version Versions.binaryValidator apply false
  38. }
  39. osDetector = osdetector
  40. BuildSrcRootProjectHolder.value = rootProject
  41. analyzes.CompiledCodeVerify.run { registerAllVerifyTasks() }
  42. allprojects {
  43. group = "net.mamoe"
  44. version = Versions.project
  45. repositories {
  46. if (System.getProperty("use.maven.local") == "true") {
  47. mavenLocal()
  48. }
  49. mavenCentral()
  50. gradlePluginPortal()
  51. google()
  52. }
  53. preConfigureJvmTarget()
  54. afterEvaluate {
  55. configureJvmTarget()
  56. configureMppShadow()
  57. configureEncoding()
  58. configureKotlinTestSettings()
  59. configureKotlinExperimentalUsages()
  60. // useIr()
  61. if (isKotlinJvmProject) {
  62. configureFlattenSourceSets()
  63. }
  64. configureJarManifest()
  65. substituteDependenciesUsingExpectedVersion()
  66. }
  67. }
  68. afterEvaluate {
  69. configureShadowDependenciesForPublishing()
  70. }
  71. subprojects {
  72. afterEvaluate {
  73. if (project.path == ":mirai-core-api") configureDokka()
  74. if (project.path == ":mirai-console") configureDokka()
  75. }
  76. }
  77. rootProject.configureDokka()
  78. tasks.register("cleanExceptIntellij") {
  79. group = "build"
  80. allprojects.forEach { proj ->
  81. if (proj.name != "mirai-console-intellij") {
  82. // Type mismatch
  83. // proj.tasks.findByName("clean")?.let(::dependsOn)
  84. proj.tasks.findByName("clean")?.let { dependsOn(it) }
  85. }
  86. }
  87. }
  88. extensions.findByName("buildScan")?.withGroovyBuilder {
  89. setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
  90. setProperty("termsOfServiceAgree", "yes")
  91. }
  92. fun Project.useIr() {
  93. kotlinCompilations?.forEach { kotlinCompilation ->
  94. kotlinCompilation.kotlinOptions.freeCompilerArgs += "-Xuse-ir"
  95. }
  96. }
  97. fun Project.configureDokka() {
  98. val isRoot = this@configureDokka == rootProject
  99. if (!isRoot) {
  100. apply(plugin = "org.jetbrains.dokka")
  101. }
  102. tasks.withType<org.jetbrains.dokka.gradle.AbstractDokkaTask>().configureEach {
  103. pluginConfiguration<DokkaBase, DokkaBaseConfiguration> {
  104. this.footerMessage = """Copyright 2019-${
  105. LocalDateTime.now().year
  106. } <a href="https://github.com/mamoe">Mamoe Technologies</a> and contributors.
  107. Source code:
  108. <a href="https://github.com/mamoe/mirai">GitHub</a>
  109. """.trimIndent()
  110. this.customAssets = listOf(
  111. rootProject.projectDir.resolve("mirai-dokka/frontend/ext.js"),
  112. )
  113. }
  114. }
  115. tasks.withType<org.jetbrains.dokka.gradle.DokkaTask>().configureEach {
  116. dokkaSourceSets.configureEach {
  117. perPackageOption {
  118. matchingRegex.set("net\\.mamoe\\.mirai\\.*")
  119. skipDeprecated.set(true)
  120. }
  121. for (suppressedPackage in arrayOf(
  122. """net.mamoe.mirai.internal""",
  123. """net.mamoe.mirai.internal.message""",
  124. """net.mamoe.mirai.internal.network""",
  125. """net.mamoe.mirai.console.internal""",
  126. """net.mamoe.mirai.console.compiler.common"""
  127. )) {
  128. perPackageOption {
  129. matchingRegex.set(suppressedPackage.replace(".", "\\."))
  130. suppress.set(true)
  131. }
  132. }
  133. }
  134. }
  135. if (isRoot) {
  136. tasks.named<org.jetbrains.dokka.gradle.AbstractDokkaTask>("dokkaHtmlMultiModule").configure {
  137. outputDirectory.set(
  138. rootProject.projectDir.resolve("mirai-dokka/pages/snapshot")
  139. )
  140. }
  141. }
  142. }