Gradle plugin with 1-line initialization of all buildscript dependencies and plugins
This commit is contained in:
parent
a5598155e5
commit
f27b81dcdd
55
embed/build.gradle.kts
Normal file
55
embed/build.gradle.kts
Normal file
@ -0,0 +1,55 @@
|
||||
import java.util.Properties
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineXomrkGiteaMavenRepo
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.optInContracts
|
||||
|
||||
buildscript {
|
||||
val versions = java.util.Properties()
|
||||
versions.load(rootDir.resolve("../versions.properties").inputStream())
|
||||
|
||||
|
||||
dependencies {
|
||||
classpath("ru.landgrafhomyak.kotlin:kotlin-mpp-gradle-build-helper:v${versions.getProperty("this")}k${versions.getProperty("kotlin")}")
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
kotlin("multiplatform") version "2.0.20"
|
||||
`maven-publish`
|
||||
}
|
||||
|
||||
val versions = Properties()
|
||||
versions.load(rootDir.resolve("../versions.properties").inputStream())
|
||||
|
||||
val targetKotlinVersion = versions.getProperty("kotlin")
|
||||
|
||||
group = "ru.landgrafhomyak.kotlin"
|
||||
version = "v${versions.getProperty("this")}k${targetKotlinVersion}"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
|
||||
|
||||
kotlin {
|
||||
optInContracts()
|
||||
|
||||
jvmToolchain(8)
|
||||
jvm()
|
||||
|
||||
sourceSets {
|
||||
jvmMain {
|
||||
dependencies {
|
||||
compileOnly("dev.gradleplugins:gradle-api:${versions.getProperty("gradle")}")
|
||||
implementation("${group}:kotlin-mpp-gradle-build-helper:${targetKotlinVersion}")
|
||||
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${targetKotlinVersion}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
publishing {
|
||||
repositories {
|
||||
defineXomrkGiteaMavenRepo()
|
||||
}
|
||||
}
|
2
embed/settings.gradle.kts
Normal file
2
embed/settings.gradle.kts
Normal file
@ -0,0 +1,2 @@
|
||||
rootProject.name = "kotlin-mpp-gradle-build"
|
||||
|
@ -0,0 +1,19 @@
|
||||
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
|
||||
|
||||
class SetupBuildScript : Plugin<Project> {
|
||||
override fun apply(project: Project) {
|
||||
project.extensions.add("xomrk", XomrkDsl(project))
|
||||
}
|
||||
|
||||
internal object PluginIDs {
|
||||
@JvmStatic
|
||||
val THIS = "ru.landgrafhomyak.kotlin.original-multiplatform-ext"
|
||||
|
||||
@JvmStatic
|
||||
val KOTLIN_MULTIPLATFORM = "org.jetbrains.kotlin.multiplatform"
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
|
||||
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.reflect.KClass
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.SetupBuildScript.PluginIDs
|
||||
|
||||
open class XomrkDsl internal constructor(private val project: Project) {
|
||||
@Suppress("FunctionName")
|
||||
private fun <T : Any> _wrapExtension(
|
||||
@Suppress("SameParameterValue") pluginId: String,
|
||||
extensionClass: KClass<T>,
|
||||
config: T.() -> Unit
|
||||
) {
|
||||
contract {
|
||||
callsInPlace(config, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
|
||||
if (null == this.project.plugins.findPlugin(pluginId)) {
|
||||
this.project.plugins.apply(pluginId)
|
||||
}
|
||||
|
||||
val dsl = this.project.extensions.findByType(extensionClass.java) ?: throw RuntimeException("Can't get extension")
|
||||
config(dsl)
|
||||
|
||||
}
|
||||
|
||||
fun kotlin(config: KotlinMultiplatformExtension.() -> Unit) {
|
||||
contract {
|
||||
callsInPlace(config, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
|
||||
this._wrapExtension(PluginIDs.KOTLIN_MULTIPLATFORM, KotlinMultiplatformExtension::class, config)
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
|
||||
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
import org.gradle.api.Project
|
||||
|
||||
@Suppress("unused")
|
||||
fun Project.xomrk(config: XomrkDsl.() -> Unit) {
|
||||
contract {
|
||||
callsInPlace(config, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
|
||||
if (null == this.plugins.findPlugin(SetupBuildScript::class.java)) {
|
||||
this.plugins.apply(SetupBuildScript::class.java)
|
||||
}
|
||||
|
||||
val dsl = this.extensions.findByType(XomrkDsl::class.java) ?: throw RuntimeException("Can't install helper plugin")
|
||||
|
||||
config(dsl)
|
||||
}
|
@ -0,0 +1 @@
|
||||
implementation-class=ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.SetupBuildScript
|
@ -1,2 +1,3 @@
|
||||
includeBuild("impl")
|
||||
includeBuild("embed")
|
||||
includeBuild("test")
|
@ -1,6 +1,7 @@
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineAllMultiplatformTargets
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineXomrkGiteaMavenRepo
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.optInContracts
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.xomrk
|
||||
|
||||
buildscript {
|
||||
val versions = java.util.Properties()
|
||||
@ -12,22 +13,19 @@ buildscript {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath("ru.landgrafhomyak.kotlin:kotlin-mpp-gradle-build-helper:v${versions.getProperty("this")}k${versions.getProperty("kotlin")}")
|
||||
classpath("ru.landgrafhomyak.kotlin:kotlin-mpp-gradle-build:v${versions.getProperty("this")}k${versions.getProperty("kotlin")}")
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
kotlin("multiplatform") version "2.0.20"
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
defineXomrkGiteaMavenRepo()
|
||||
}
|
||||
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(8)
|
||||
defineAllMultiplatformTargets()
|
||||
optInContracts()
|
||||
}
|
||||
xomrk {
|
||||
kotlin {
|
||||
jvmToolchain(8)
|
||||
defineAllMultiplatformTargets()
|
||||
optInContracts()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user