All Downloads are FREE. Search and download functionalities are using the official Maven repository.

name.remal.gradle_plugins.dsl.BaseProjectPlugin.kt Maven / Gradle / Ivy

package name.remal.gradle_plugins.dsl

import name.remal.findMethod
import name.remal.gradle_plugins.dsl.artifact.ArtifactsCacheCleanerPlugin
import name.remal.gradle_plugins.dsl.extensions.applyPlugin
import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.util.GradleVersion
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.net.URL
import java.net.URLConnection

abstract class BaseProjectPlugin : Plugin {

    init {
        if (!JavaVersion.current().isJava8Compatible) throw IllegalStateException("Current Java version is not compatible with Java 8")
    }

    protected open fun getRequiredGradleVersion(): GradleVersion = GradleVersion.version("4.4")

    init {
        val current = GradleVersion.current()
        val required = getRequiredGradleVersion()
        if (current < required) throw IllegalStateException("Too old Gradle version - ${current.version} (at minimum ${required.version} required)")
    }

    final override fun apply(project: Project) {
        project.applyPlugin(ArtifactsCacheCleanerPlugin::class.java)
        applyImpl(project)
    }

    protected abstract fun applyImpl(project: Project)

    protected val logger: Logger = LoggerFactory.getLogger(this.javaClass)


    // Common actions:

    init { // Disable JarURLConnections caching
        val setDefaultUseCaches = URLConnection::class.java.findMethod("setDefaultUseCaches", String::class.java, Boolean::class.java)
        if (null != setDefaultUseCaches) {
            setDefaultUseCaches.apply { isAccessible = true }.invoke(null, "jar", false)

        } else {
            URL("jar:file://dummy.jar!/").openConnection().defaultUseCaches = false
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy