build.gradle.kts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /*
  2. * Copyright 2019-2020 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/master/LICENSE
  8. */
  9. @file:Suppress("UNUSED_VARIABLE")
  10. plugins {
  11. kotlin("multiplatform")
  12. id("kotlinx-atomicfu")
  13. kotlin("plugin.serialization")
  14. id("net.mamoe.kotlin-jvm-blocking-bridge")
  15. `maven-publish`
  16. id("com.jfrog.bintray")
  17. }
  18. description = "mirai-core ultilities"
  19. val isAndroidSDKAvailable: Boolean by project
  20. afterEvaluate {
  21. tasks.getByName("compileKotlinCommon").enabled = false
  22. tasks.getByName("compileTestKotlinCommon").enabled = false
  23. tasks.getByName("compileCommonMainKotlinMetadata").enabled = false
  24. tasks.getByName("compileKotlinMetadata").enabled = false
  25. }
  26. kotlin {
  27. explicitApi()
  28. if (isAndroidSDKAvailable) {
  29. apply(from = rootProject.file("gradle/android.gradle"))
  30. android("android") {
  31. publishAllLibraryVariants()
  32. }
  33. } else {
  34. println(
  35. """Android SDK 可能未安装.
  36. $name 的 Android 目标编译将不会进行.
  37. 这不会影响 Android 以外的平台的编译.
  38. """.trimIndent()
  39. )
  40. println(
  41. """Android SDK might not be installed.
  42. Android target of $name will not be compiled.
  43. It does no influence on the compilation of other platforms.
  44. """.trimIndent()
  45. )
  46. }
  47. jvm("common") {
  48. attributes.attribute(Attribute.of("mirai.target.platform", String::class.java), "common")
  49. }
  50. jvm("jvm") {
  51. attributes.attribute(Attribute.of("mirai.target.platform", String::class.java), "jvm")
  52. }
  53. // jvm("android") {
  54. // attributes.attribute(Attribute.of("mirai.target.platform", String::class.java), "android")
  55. // }
  56. sourceSets {
  57. val commonMain by getting {
  58. dependencies {
  59. api(kotlin("serialization"))
  60. api(kotlin("reflect"))
  61. api1(`kotlinx-serialization-core`)
  62. api1(`kotlinx-serialization-json`)
  63. implementation1(`kotlinx-serialization-protobuf`)
  64. api1(`kotlinx-io-jvm`)
  65. api1(`kotlinx-coroutines-io-jvm`)
  66. api(`kotlinx-coroutines-core`)
  67. implementation1(`kotlinx-atomicfu`)
  68. api1(`ktor-client-cio`)
  69. api1(`ktor-client-core`)
  70. api1(`ktor-network`)
  71. compileOnly(`log4j-api`)
  72. compileOnly(slf4j)
  73. }
  74. }
  75. if (isAndroidSDKAvailable) {
  76. androidMain {
  77. dependencies {
  78. api1(`ktor-client-android`)
  79. }
  80. }
  81. }
  82. val jvmMain by getting
  83. val jvmTest by getting {
  84. dependencies {
  85. api("org.pcap4j:pcap4j-distribution:1.8.2")
  86. runtimeOnly(files("build/classes/kotlin/jvm/test")) // classpath is not properly set by IDE
  87. }
  88. }
  89. }
  90. }
  91. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.androidMain: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  92. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("androidMain")
  93. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.androidTest: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  94. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("androidTest")
  95. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.jvmMain: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  96. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("jvmMain")
  97. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.jvmTest: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  98. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("jvmTest")
  99. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.implementation1(dependencyNotation: String) =
  100. implementation(dependencyNotation) {
  101. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  102. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  103. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  104. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  105. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  106. }
  107. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.api1(dependencyNotation: String) =
  108. api(dependencyNotation) {
  109. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  110. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  111. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  112. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  113. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  114. }
  115. apply(from = rootProject.file("gradle/publish.gradle"))
  116. tasks.withType<com.jfrog.bintray.gradle.tasks.BintrayUploadTask> {
  117. doFirst {
  118. publishing.publications
  119. .filterIsInstance<MavenPublication>()
  120. .forEach { publication ->
  121. val moduleFile = buildDir.resolve("publications/${publication.name}/module.json")
  122. if (moduleFile.exists()) {
  123. publication.artifact(object :
  124. org.gradle.api.publish.maven.internal.artifact.FileBasedMavenArtifact(moduleFile) {
  125. override fun getDefaultExtension() = "module"
  126. })
  127. }
  128. }
  129. }
  130. }