diff --git a/README.md b/README.md index 47aeb2f..9a4041b 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,12 @@ plugins { id 'net.minecrell.plugin-yml.bukkit' version '0.4.0' } +dependencies { + // Downloaded from Maven Central when the plugin is loaded + library 'com.google.code.gson:gson:2.8.7' // All platforms + bukkitLibrary 'com.google.code.gson:gson:2.8.7' // Bukkit only +} + bukkit { // Default values can be overridden if needed // name = 'TestPlugin' @@ -85,6 +91,13 @@ plugins { id("net.minecrell.plugin-yml.bukkit") version "0.4.0" } +dependencies { + // Downloaded from Maven Central when the plugin is loaded + library(kotlin("stdlib")) // All platforms + library("com.google.code.gson", "gson", "2.8.7") // All platforms + bukkitLibrary("com.google.code.gson", "gson", "2.8.7") // Bukkit only +} + bukkit { // Default values can be overridden if needed // name = "TestPlugin" @@ -145,6 +158,12 @@ plugins { id 'net.minecrell.plugin-yml.bungee' version '0.4.0' } +dependencies { + // Downloaded from Maven Central when the plugin is loaded + library 'com.google.code.gson:gson:2.8.7' // All platforms + bungeeLibrary 'com.google.code.gson:gson:2.8.7' // Bungee only +} + bungee { // Default values can be overridden if needed // name = 'TestPlugin' @@ -170,6 +189,13 @@ plugins { id("net.minecrell.plugin-yml.bungee") version "0.4.0" } +dependencies { + // Downloaded from Maven Central when the plugin is loaded + library(kotlin("stdlib")) // All platforms + library("com.google.code.gson", "gson", "2.8.7") // All platforms + bungeeLibrary("com.google.code.gson", "gson", "2.8.7") // Bungee only +} + bungee { // Default values can be overridden if needed // name = "TestPlugin" diff --git a/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt b/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt index 4ce53a1..3aaabe4 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt @@ -26,6 +26,7 @@ package net.minecrell.pluginyml import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration import org.gradle.api.plugins.JavaPlugin import org.gradle.kotlin.dsl.register import org.gradle.api.tasks.SourceSet @@ -37,6 +38,11 @@ abstract class PlatformPlugin(private val platformName: S protected abstract fun createExtension(project: Project): T + protected open fun createConfiguration(project: Project): Configuration? { + val library = project.configurations.maybeCreate("library") + return project.configurations.create("${platformName.decapitalize()}Library").extendsFrom(library) + } + final override fun apply(project: Project) { project.run { val description = createExtension(this) @@ -46,12 +52,15 @@ abstract class PlatformPlugin(private val platformName: S val generatedResourcesDirectory = layout.buildDirectory.dir("generated/plugin-yml/$platformName") + // Add library configuration + val libraries = createConfiguration(this) + // Create task val generateTask = tasks.register("generate${platformName}PluginDescription") { fileName.set(this@PlatformPlugin.fileName) outputDirectory.set(generatedResourcesDirectory) pluginDescription.set(provider { - setDefaults(project, description) + setDefaults(project, libraries, description) description }) @@ -63,12 +72,15 @@ abstract class PlatformPlugin(private val platformName: S plugins.withType { extensions.getByType().named(SourceSet.MAIN_SOURCE_SET_NAME) { resources.srcDir(generateTask) + if (libraries != null) { + configurations.getByName(compileClasspathConfigurationName).extendsFrom(libraries) + } } } } } - protected abstract fun setDefaults(project: Project, description: T) + protected abstract fun setDefaults(project: Project, libraries: Configuration?, description: T) protected abstract fun validate(description: T) } diff --git a/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPlugin.kt b/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPlugin.kt index d3c1982..820228b 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPlugin.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPlugin.kt @@ -27,6 +27,7 @@ package net.minecrell.pluginyml.bukkit import net.minecrell.pluginyml.InvalidPluginDescriptionException import net.minecrell.pluginyml.PlatformPlugin import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration class BukkitPlugin : PlatformPlugin("Bukkit", "plugin.yml") { @@ -36,12 +37,14 @@ class BukkitPlugin : PlatformPlugin("Bukkit", "plugin.y override fun createExtension(project: Project) = BukkitPluginDescription(project) - override fun setDefaults(project: Project, description: BukkitPluginDescription) { + override fun setDefaults(project: Project, libraries: Configuration?, description: BukkitPluginDescription) { description.name = description.name ?: project.name description.version = description.version ?: project.version.toString() description.description = description.description ?: project.description description.website = description.website ?: project.findProperty("url")?.toString() description.author = description.author ?: project.findProperty("author")?.toString() + description.libraries = description.libraries ?: libraries!!.resolvedConfiguration.firstLevelModuleDependencies + .map { it.module.id.toString() } } override fun validate(description: BukkitPluginDescription) { diff --git a/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPluginDescription.kt b/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPluginDescription.kt index f772892..a6a3084 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPluginDescription.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/bukkit/BukkitPluginDescription.kt @@ -52,6 +52,7 @@ class BukkitPluginDescription(project: Project) : PluginDescription { @Input @Optional var prefix: String? = null @Input @Optional @JsonProperty("default-permission") var defaultPermission: Permission.Default? = null @Input @Optional var provides: List? = null + @Input @Optional var libraries: List? = null @Nested val commands: NamedDomainObjectContainer = project.container(Command::class.java) @Nested val permissions: NamedDomainObjectContainer = project.container(Permission::class.java) diff --git a/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePlugin.kt b/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePlugin.kt index 0c987fa..a29b256 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePlugin.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePlugin.kt @@ -27,16 +27,19 @@ package net.minecrell.pluginyml.bungee import net.minecrell.pluginyml.InvalidPluginDescriptionException import net.minecrell.pluginyml.PlatformPlugin import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration class BungeePlugin : PlatformPlugin("Bungee", "bungee.yml") { override fun createExtension(project: Project) = BungeePluginDescription() - override fun setDefaults(project: Project, description: BungeePluginDescription) { + override fun setDefaults(project: Project, libraries: Configuration?, description: BungeePluginDescription) { description.name = description.name ?: project.name description.version = description.version ?: project.version.toString() description.description = description.description ?: project.description description.author = description.author ?: project.findProperty("author")?.toString() + description.libraries = description.libraries ?: libraries!!.resolvedConfiguration.firstLevelModuleDependencies + .map { it.module.id.toString() } } override fun validate(description: BungeePluginDescription) { diff --git a/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePluginDescription.kt b/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePluginDescription.kt index f53bd05..27c73ef 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePluginDescription.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/bungee/BungeePluginDescription.kt @@ -36,4 +36,5 @@ class BungeePluginDescription : PluginDescription { @Input @Optional var depends: Set? = null @Input @Optional var softDepends: Set? = null @Input @Optional var description: String? = null + @Input @Optional var libraries: List? = null } diff --git a/src/main/kotlin/net/minecrell/pluginyml/nukkit/NukkitPlugin.kt b/src/main/kotlin/net/minecrell/pluginyml/nukkit/NukkitPlugin.kt index f235d30..9bbaafc 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/nukkit/NukkitPlugin.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/nukkit/NukkitPlugin.kt @@ -27,11 +27,16 @@ package net.minecrell.pluginyml.nukkit import net.minecrell.pluginyml.InvalidPluginDescriptionException import net.minecrell.pluginyml.PlatformPlugin import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration class NukkitPlugin : PlatformPlugin("Nukkit", "nukkit.yml") { override fun createExtension(project: Project) = NukkitPluginDescription(project) - override fun setDefaults(project: Project, description: NukkitPluginDescription) { + override fun createConfiguration(project: Project): Configuration? { + return null + } + + override fun setDefaults(project: Project, libraries: Configuration?, description: NukkitPluginDescription) { description.name = description.name ?: project.name description.version = description.version ?: project.version.toString() description.description = description.description ?: project.description