2
0

build.gradle.kts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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 shadow.configureMppShadow
  13. import java.time.LocalDateTime
  14. buildscript {
  15. repositories {
  16. if (System.getProperty("use.maven.local") == "true") {
  17. mavenLocal()
  18. }
  19. mavenCentral()
  20. gradlePluginPortal()
  21. google()
  22. }
  23. dependencies {
  24. classpath("com.android.tools.build:gradle:${Versions.androidGradlePlugin}")
  25. classpath("org.jetbrains.kotlinx:atomicfu-gradle-plugin:${Versions.atomicFU}")
  26. classpath("org.jetbrains.dokka:dokka-base:${Versions.dokka}")
  27. }
  28. }
  29. plugins {
  30. kotlin("jvm") apply false // version Versions.kotlinCompiler
  31. kotlin("plugin.serialization") version Versions.kotlinCompiler apply false
  32. id("com.google.osdetector")
  33. id("org.jetbrains.dokka") version Versions.dokka
  34. id("me.him188.kotlin-jvm-blocking-bridge") version Versions.blockingBridge
  35. id("me.him188.kotlin-dynamic-delegation") version Versions.dynamicDelegation apply false
  36. id("me.him188.maven-central-publish") version Versions.mavenCentralPublish apply false
  37. id("com.gradle.plugin-publish") version "1.1.0" apply false
  38. id("org.jetbrains.kotlinx.binary-compatibility-validator") version Versions.binaryValidator apply false
  39. id("com.android.library") apply false
  40. }
  41. osDetector = osdetector
  42. BuildSrcRootProjectHolder.value = rootProject
  43. BuildSrcRootProjectHolder.lastUpdateTime = System.currentTimeMillis()
  44. analyzes.CompiledCodeVerify.run { registerAllVerifyTasks() }
  45. allprojects {
  46. group = "net.mamoe"
  47. version = Versions.project
  48. repositories {
  49. if (System.getProperty("use.maven.local") == "true") {
  50. mavenLocal()
  51. }
  52. mavenCentral()
  53. gradlePluginPortal()
  54. google()
  55. }
  56. preConfigureJvmTarget()
  57. afterEvaluate {
  58. configureJvmTarget()
  59. configureMppShadow()
  60. configureEncoding()
  61. configureKotlinTestSettings()
  62. configureKotlinOptIns()
  63. if (isKotlinJvmProject) {
  64. configureFlattenSourceSets()
  65. }
  66. configureJarManifest()
  67. substituteDependenciesUsingExpectedVersion()
  68. }
  69. }
  70. subprojects {
  71. afterEvaluate {
  72. if (project.path == ":mirai-core-api") configureDokka()
  73. if (project.path == ":mirai-console") configureDokka()
  74. }
  75. }
  76. rootProject.configureDokka()
  77. tasks.register("cleanExceptIntellij") {
  78. group = "build"
  79. allprojects.forEach { proj ->
  80. if (proj.name != "mirai-console-intellij") {
  81. // Type mismatch
  82. // proj.tasks.findByName("clean")?.let(::dependsOn)
  83. proj.tasks.findByName("clean")?.let { dependsOn(it) }
  84. }
  85. }
  86. }
  87. extensions.findByName("buildScan")?.withGroovyBuilder {
  88. setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
  89. setProperty("termsOfServiceAgree", "yes")
  90. }
  91. fun Project.configureDokka() {
  92. val isRoot = this@configureDokka == rootProject
  93. if (!isRoot) {
  94. apply(plugin = "org.jetbrains.dokka")
  95. }
  96. tasks.withType<org.jetbrains.dokka.gradle.AbstractDokkaTask>().configureEach {
  97. pluginConfiguration<DokkaBase, DokkaBaseConfiguration> {
  98. this.footerMessage = """Copyright 2019-${
  99. LocalDateTime.now().year
  100. } <a href="https://github.com/mamoe">Mamoe Technologies</a> and contributors.
  101. Source code:
  102. <a href="https://github.com/mamoe/mirai">GitHub</a>
  103. """.trimIndent()
  104. this.customAssets = listOf(
  105. rootProject.projectDir.resolve("mirai-dokka/frontend/ext.js"),
  106. )
  107. }
  108. }
  109. tasks.withType<org.jetbrains.dokka.gradle.DokkaTask>().configureEach {
  110. dokkaSourceSets.configureEach {
  111. perPackageOption {
  112. matchingRegex.set("net\\.mamoe\\.mirai\\.*")
  113. skipDeprecated.set(true)
  114. }
  115. for (suppressedPackage in arrayOf(
  116. """net.mamoe.mirai.internal""",
  117. """net.mamoe.mirai.internal.message""",
  118. """net.mamoe.mirai.internal.network""",
  119. """net.mamoe.mirai.console.internal""",
  120. """net.mamoe.mirai.console.compiler.common"""
  121. )) {
  122. perPackageOption {
  123. matchingRegex.set(suppressedPackage.replace(".", "\\."))
  124. suppress.set(true)
  125. }
  126. }
  127. }
  128. }
  129. if (isRoot) {
  130. tasks.named<org.jetbrains.dokka.gradle.AbstractDokkaTask>("dokkaHtmlMultiModule").configure {
  131. outputDirectory.set(
  132. rootProject.projectDir.resolve("mirai-dokka/pages/snapshot")
  133. )
  134. }
  135. }
  136. }