diff --git a/subprojects/kotlin-dsl-plugins/src/integTest/kotlin/org/gradle/kotlin/dsl/plugins/precompiled/PrecompiledScriptPluginAccessorsTest.kt b/subprojects/kotlin-dsl-plugins/src/integTest/kotlin/org/gradle/kotlin/dsl/plugins/precompiled/PrecompiledScriptPluginAccessorsTest.kt index 14be37be530b..16b79ac5f7a7 100644 --- a/subprojects/kotlin-dsl-plugins/src/integTest/kotlin/org/gradle/kotlin/dsl/plugins/precompiled/PrecompiledScriptPluginAccessorsTest.kt +++ b/subprojects/kotlin-dsl-plugins/src/integTest/kotlin/org/gradle/kotlin/dsl/plugins/precompiled/PrecompiledScriptPluginAccessorsTest.kt @@ -348,13 +348,22 @@ class PrecompiledScriptPluginAccessorsTest : AbstractPrecompiledScriptPluginTest val pluginJar = jarForPlugin(pluginId, "MyPlugin") withPrecompiledScriptApplying(pluginId, pluginJar) + assertPrecompiledScriptPluginApplies( + pluginId, + "Plugin_gradle" + ) + } + + private + fun assertPrecompiledScriptPluginApplies(pluginId: String, precompiledScriptClassName: String) { + compileKotlin() val (project, pluginManager) = projectAndPluginManagerMocks() instantiatePrecompiledScriptOf( project, - "Plugin_gradle" + precompiledScriptClassName ) inOrder(pluginManager) { @@ -363,6 +372,27 @@ class PrecompiledScriptPluginAccessorsTest : AbstractPrecompiledScriptPluginTest } } + @Test + fun `can use plugin specs with jruby-gradle-plugin`() { + + withKotlinDslPlugin().appendText(""" + dependencies { + compile("com.github.jruby-gradle:jruby-gradle-plugin:1.4.0") + } + """) + + withPrecompiledKotlinScript("plugin.gradle.kts", """ + plugins { + com.github.`jruby-gradle`.base + } + """) + + assertPrecompiledScriptPluginApplies( + "com.github.jruby-gradle.base", + "Plugin_gradle" + ) + } + @Test fun `plugin application errors are reported but don't cause the build to fail`() { diff --git a/subprojects/kotlin-dsl/src/main/kotlin/org/gradle/kotlin/dsl/codegen/PluginIdExtensions.kt b/subprojects/kotlin-dsl/src/main/kotlin/org/gradle/kotlin/dsl/codegen/PluginIdExtensions.kt index 4d6dafc6e76a..2b5259406701 100644 --- a/subprojects/kotlin-dsl/src/main/kotlin/org/gradle/kotlin/dsl/codegen/PluginIdExtensions.kt +++ b/subprojects/kotlin-dsl/src/main/kotlin/org/gradle/kotlin/dsl/codegen/PluginIdExtensions.kt @@ -22,6 +22,7 @@ import org.gradle.plugin.use.PluginDependencySpec import java.io.File import java.util.Properties +import java.util.jar.JarEntry import java.util.jar.JarFile @@ -248,7 +249,7 @@ internal fun pluginEntriesFrom(jar: File): List = JarFile(jar).use { jarFile -> jarFile.entries().asSequence().filter { - it.isFile && it.name.startsWith("META-INF/gradle-plugins/") + isGradlePluginPropertiesFile(it) }.map { pluginEntry -> val pluginProperties = jarFile.getInputStream(pluginEntry).use { Properties().apply { load(it) } } val id = pluginEntry.name.substringAfterLast("/").substringBeforeLast(".properties") @@ -256,3 +257,9 @@ fun pluginEntriesFrom(jar: File): List = PluginEntry(id, implementationClass) }.toList() } + + +private +fun isGradlePluginPropertiesFile(entry: JarEntry) = entry.run { + isFile && name.run { startsWith("META-INF/gradle-plugins/") && endsWith(".properties") } +}