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

name.remal.gradle_plugins.dsl.extensions.org.gradle.api.artifacts.repositories.MavenArtifactRepository.kt Maven / Gradle / Ivy

There is a newer version: 1.9.2
Show newest version
package name.remal.gradle_plugins.dsl.extensions

import name.remal.findCompatibleMethod
import name.remal.gradle_plugins.dsl.utils.getGradleLogger
import name.remal.warn
import org.gradle.api.Action
import org.gradle.api.artifacts.repositories.ArtifactRepository
import org.gradle.api.artifacts.repositories.MavenArtifactRepository

fun MavenArtifactRepository.releasesOnly() = forMavenContent { releasesOnly() }
fun MavenArtifactRepository.snapshotsOnly() = forMavenContent { snapshotsOnly() }


private class MavenArtifactRepositoryMavenContent(private val delegate: Any) {

    companion object {
        private val logger = getGradleLogger(MavenArtifactRepositoryMavenContent::class.java)
    }

    fun releasesOnly() {
        try {
            delegate.javaClass.getMethod("releasesOnly").apply {
                isAccessible = true
                invoke(delegate)
            }
        } catch (e: Exception) {
            logger.warn(e)
        }
    }

    fun snapshotsOnly() {
        try {
            delegate.javaClass.getMethod("snapshotsOnly").apply {
                isAccessible = true
                invoke(delegate)
            }
        } catch (e: Exception) {
            logger.warn(e)
        }
    }

}

private val mavenContentMethod = ArtifactRepository::class.java.findCompatibleMethod("mavenContent", Action::class.java)
    ?.apply { isAccessible = true }

private fun ArtifactRepository.forMavenContent(action: MavenArtifactRepositoryMavenContent.() -> Unit) {
    mavenContentMethod?.invoke(this, Action { delegate ->
        MavenArtifactRepositoryMavenContent(delegate).apply(action)
    })
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy