build.gradle.kts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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. id("de.mannodermaus.android-junit5") version "1.8.2.1" apply false
  41. }
  42. osDetector = osdetector
  43. BuildSrcRootProjectHolder.value = rootProject
  44. BuildSrcRootProjectHolder.lastUpdateTime = System.currentTimeMillis()
  45. analyzes.CompiledCodeVerify.run { registerAllVerifyTasks() }
  46. allprojects {
  47. group = "net.mamoe"
  48. version = Versions.project
  49. repositories {
  50. if (System.getProperty("use.maven.local") == "true") {
  51. mavenLocal()
  52. }
  53. mavenCentral()
  54. gradlePluginPortal()
  55. google()
  56. }
  57. preConfigureJvmTarget()
  58. afterEvaluate {
  59. configureJvmTarget()
  60. configureMppShadow()
  61. configureEncoding()
  62. configureKotlinTestSettings()
  63. configureKotlinOptIns()
  64. if (isKotlinJvmProject) {
  65. configureFlattenSourceSets()
  66. }
  67. configureJarManifest()
  68. substituteDependenciesUsingExpectedVersion()
  69. }
  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.configureDokka() {
  93. val isRoot = this@configureDokka == rootProject
  94. if (!isRoot) {
  95. apply(plugin = "org.jetbrains.dokka")
  96. }
  97. tasks.withType<org.jetbrains.dokka.gradle.AbstractDokkaTask>().configureEach {
  98. pluginConfiguration<DokkaBase, DokkaBaseConfiguration> {
  99. this.footerMessage = """Copyright 2019-${
  100. LocalDateTime.now().year
  101. } <a href="https://github.com/mamoe">Mamoe Technologies</a> and contributors.
  102. Source code:
  103. <a href="https://github.com/mamoe/mirai">GitHub</a>
  104. """.trimIndent()
  105. this.customAssets = listOf(
  106. rootProject.projectDir.resolve("mirai-dokka/frontend/ext.js"),
  107. )
  108. }
  109. }
  110. tasks.withType<org.jetbrains.dokka.gradle.DokkaTask>().configureEach {
  111. dokkaSourceSets.configureEach {
  112. perPackageOption {
  113. matchingRegex.set("net\\.mamoe\\.mirai\\.*")
  114. skipDeprecated.set(true)
  115. }
  116. for (suppressedPackage in arrayOf(
  117. """net.mamoe.mirai.internal""",
  118. """net.mamoe.mirai.internal.message""",
  119. """net.mamoe.mirai.internal.network""",
  120. """net.mamoe.mirai.console.internal""",
  121. """net.mamoe.mirai.console.compiler.common"""
  122. )) {
  123. perPackageOption {
  124. matchingRegex.set(suppressedPackage.replace(".", "\\."))
  125. suppress.set(true)
  126. }
  127. }
  128. }
  129. }
  130. if (isRoot) {
  131. tasks.named<org.jetbrains.dokka.gradle.AbstractDokkaTask>("dokkaHtmlMultiModule").configure {
  132. outputDirectory.set(
  133. rootProject.projectDir.resolve("mirai-dokka/pages/snapshot")
  134. )
  135. }
  136. }
  137. }