name.remal.gradle_plugins.dsl.extensions.org.gradle.api.artifacts.repositories.MavenArtifactRepository.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-plugins-kotlin-dsl Show documentation
Show all versions of gradle-plugins-kotlin-dsl Show documentation
Remal Gradle plugins: gradle-plugins-kotlin-dsl
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)
})
}