Fixed issues with updating gradle wrapper version. Added kotlin extension functions

This commit is contained in:
nathan 2020-05-24 01:00:21 +02:00
parent c16f724c6e
commit caadae8823
3 changed files with 47 additions and 25 deletions

View File

@ -26,7 +26,7 @@ plugins {
id("com.dorkbox.Licensing") version "1.3"
id("com.dorkbox.VersionUpdate") version "1.6.1"
id("com.dorkbox.GradleUtils") version "1.4"
id("com.dorkbox.GradleUtils") version "1.5"
kotlin("jvm") version "1.3.72"
}
@ -35,7 +35,7 @@ object Extras {
// set for the project
const val description = "Gradle Plugin to manage various Gradle tasks, such as updating gradle and dependencies"
const val group = "com.dorkbox"
const val version = "1.4"
const val version = "1.5"
// set as project.ext
const val name = "Gradle Utils"
@ -79,6 +79,9 @@ sourceSets {
repositories {
jcenter()
maven {
url = uri("https://plugins.gradle.org/m2/")
}
}
dependencies {
@ -90,6 +93,7 @@ dependencies {
// setup checking for the latest version of a plugin or dependency
implementation("com.github.ben-manes:gradle-versions-plugin:0.28.0")
// for parsing JSON
implementation("org.json:json:20180813")
}

View File

@ -16,6 +16,9 @@
package dorkbox.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.wrapper.Wrapper
import org.gradle.util.GradleVersion
@ -24,36 +27,17 @@ import java.net.URL
open class
GradleUpdateTask : DefaultTask() {
@Volatile var foundGradleVersion : String? = "0.0"
private val wrapper = project.tasks.create("wrapperUpdate", Wrapper::class.java)
private val releaseText: String
init {
outputs.upToDateWhen { false }
outputs.cacheIf { false }
description = "Automatically update GRADLE to the latest version"
releaseText = URL("https://services.gradle.org/versions/current").readText()
foundGradleVersion = JSONObject(releaseText)["version"] as String?
if (foundGradleVersion != "0.0") {
wrapper.apply {
group = "gradle"
outputs.upToDateWhen { false }
outputs.cacheIf { false }
gradleVersion = foundGradleVersion
distributionUrl = distributionUrl.replace("bin", "all")
}
finalizedBy(wrapper)
} else {
println("\tUnable to detect New Gradle Version.")
}
}
@TaskAction
fun run() {
val releaseText = URL("https://services.gradle.org/versions/current").readText()
val foundGradleVersion = JSONObject(releaseText)["version"] as String?
if (foundGradleVersion.isNullOrEmpty()) {
println("\tUnable to detect New Gradle Version. Output json: $releaseText")
}
@ -64,6 +48,19 @@ GradleUpdateTask : DefaultTask() {
println("\tGradle is already latest version '$foundGradleVersion'")
} else {
println("\tDetected new Gradle Version: '$foundGradleVersion', updating from $current")
val wrapper = project.tasks.create("wrapperUpdate", Wrapper::class.java)
wrapper.apply {
group = "other"
outputs.upToDateWhen { false }
outputs.cacheIf { false }
gradleVersion = foundGradleVersion
distributionUrl = distributionUrl.replace("bin", "all")
distributionType = Wrapper.DistributionType.ALL
}
wrapper.actions[0].execute(wrapper)
}
}
}

View File

@ -18,6 +18,10 @@ package dorkbox.gradle
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.tasks.SourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import java.util.*
/**
@ -32,7 +36,7 @@ class GradleUtils : Plugin<Project> {
override fun apply(project: Project) {
propertyMappingExtension = project.extensions.create("GradleUtils", StaticMethodsAndTools::class.java, project)
project.tasks.create("autoUpdateGradle", GradleUpdateTask::class.java).apply {
project.tasks.create("updateGradleWrapper", GradleUpdateTask::class.java).apply {
group = "gradle"
}
@ -60,3 +64,20 @@ class GradleUtils : Plugin<Project> {
}
}
}
// Fix defaults for gradle, since it's mildly retarded when it comes to kotlin, so we can have sane sourceset/configuration options
// from: https://github.com/gradle/kotlin-dsl-samples/blob/201534f53d93660c273e09f768557220d33810a9/buildSrc/src/main/kotlin/build/KotlinPluginExtensions.kt
val SourceSet.kotlin: SourceDirectorySet
get() =
(this as org.gradle.api.internal.HasConvention)
.convention
.getPlugin(KotlinSourceSet::class.java)
.kotlin
fun SourceSet.kotlin(action: SourceDirectorySet.() -> Unit) =
kotlin.action()
val Project.sourceSets: SortedMap<String, SourceSet>
get() = (this.extensions.getByName("sourceSets") as org.gradle.api.tasks.SourceSetContainer).asMap