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("impl")
|
||||||
|
includeBuild("embed")
|
||||||
includeBuild("test")
|
includeBuild("test")
|
@ -1,6 +1,7 @@
|
|||||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineAllMultiplatformTargets
|
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.defineXomrkGiteaMavenRepo
|
||||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.optInContracts
|
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.optInContracts
|
||||||
|
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.xomrk
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
val versions = java.util.Properties()
|
val versions = java.util.Properties()
|
||||||
@ -12,22 +13,19 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
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 {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
defineXomrkGiteaMavenRepo()
|
defineXomrkGiteaMavenRepo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xomrk {
|
||||||
kotlin {
|
kotlin {
|
||||||
jvmToolchain(8)
|
jvmToolchain(8)
|
||||||
defineAllMultiplatformTargets()
|
defineAllMultiplatformTargets()
|
||||||
optInContracts()
|
optInContracts()
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user