build.gradle.kts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. BuildSrcRootProjectHolder.lastUpdateTime = System.currentTimeMillis()
  42. analyzes.CompiledCodeVerify.run { registerAllVerifyTasks() }
  43. allprojects {
  44. group = "net.mamoe"
  45. version = Versions.project
  46. repositories {
  47. if (System.getProperty("use.maven.local") == "true") {
  48. mavenLocal()
  49. }
  50. mavenCentral()
  51. gradlePluginPortal()
  52. google()
  53. }
  54. preConfigureJvmTarget()
  55. afterEvaluate {
  56. configureJvmTarget()
  57. configureMppShadow()
  58. configureEncoding()
  59. configureKotlinTestSettings()
  60. configureKotlinExperimentalUsages()
  61. // useIr()
  62. if (isKotlinJvmProject) {
  63. configureFlattenSourceSets()
  64. }
  65. configureJarManifest()
  66. substituteDependenciesUsingExpectedVersion()
  67. }
  68. }
  69. afterEvaluate {
  70. configureShadowDependenciesForPublishing()
  71. }
  72. subprojects {
  73. afterEvaluate {
  74. if (project.path == ":mirai-core-api") configureDokka()
  75. if (project.path == ":mirai-console") configureDokka()
  76. }
  77. }
  78. rootProject.configureDokka()
  79. tasks.register("cleanExceptIntellij") {
  80. group = "build"
  81. allprojects.forEach { proj ->
  82. if (proj.name != "mirai-console-intellij") {
  83. // Type mismatch
  84. // proj.tasks.findByName("clean")?.let(::dependsOn)
  85. proj.tasks.findByName("clean")?.let { dependsOn(it) }
  86. }
  87. }
  88. }
  89. extensions.findByName("buildScan")?.withGroovyBuilder {
  90. setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
  91. setProperty("termsOfServiceAgree", "yes")
  92. }
  93. fun Project.useIr() {
  94. kotlinCompilations?.forEach { kotlinCompilation ->
  95. kotlinCompilation.kotlinOptions.freeCompilerArgs += "-Xuse-ir"
  96. }
  97. }
  98. fun Project.configureDokka() {
  99. val isRoot = this@configureDokka == rootProject
  100. if (!isRoot) {
  101. apply(plugin = "org.jetbrains.dokka")
  102. }
  103. tasks.withType<org.jetbrains.dokka.gradle.AbstractDokkaTask>().configureEach {
  104. pluginConfiguration<DokkaBase, DokkaBaseConfiguration> {
  105. this.footerMessage = """Copyright 2019-${
  106. LocalDateTime.now().year
  107. } <a href="https://github.com/mamoe">Mamoe Technologies</a> and contributors.
  108. Source code:
  109. <a href="https://github.com/mamoe/mirai">GitHub</a>
  110. """.trimIndent()
  111. this.customAssets = listOf(
  112. rootProject.projectDir.resolve("mirai-dokka/frontend/ext.js"),
  113. )
  114. }
  115. }
  116. tasks.withType<org.jetbrains.dokka.gradle.DokkaTask>().configureEach {
  117. dokkaSourceSets.configureEach {
  118. perPackageOption {
  119. matchingRegex.set("net\\.mamoe\\.mirai\\.*")
  120. skipDeprecated.set(true)
  121. }
  122. for (suppressedPackage in arrayOf(
  123. """net.mamoe.mirai.internal""",
  124. """net.mamoe.mirai.internal.message""",
  125. """net.mamoe.mirai.internal.network""",
  126. """net.mamoe.mirai.console.internal""",
  127. """net.mamoe.mirai.console.compiler.common"""
  128. )) {
  129. perPackageOption {
  130. matchingRegex.set(suppressedPackage.replace(".", "\\."))
  131. suppress.set(true)
  132. }
  133. }
  134. }
  135. }
  136. if (isRoot) {
  137. tasks.named<org.jetbrains.dokka.gradle.AbstractDokkaTask>("dokkaHtmlMultiModule").configure {
  138. outputDirectory.set(
  139. rootProject.projectDir.resolve("mirai-dokka/pages/snapshot")
  140. )
  141. }
  142. }
  143. }