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