diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c9f8e4..4c2da4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,14 +42,16 @@ The plugin has been converted to Kotlin to make support easier. The plugin still can be configured with Groovy DSL but now it is friendly to Kotlin DSL. -### Added -- Configuration avoidance and build cache for task `generateMetaData` - ### Removed - Task `:rebuildServerCore`, use `:buildServerCore --rerun-tasks` instead - Extension `DependencyHandler.craftbukkit()`, use `DependencyHandler.spigot()` instead - Automatic `mavenLocal()` apply, you should apply it manually if you need it +### Changed +- Add `nogui` argument by default to `bukkitArgs` +- Type of properties `server.jvmArgs` and `server.bukkitArgs` changed from `String` to `List`. + It makes it easier to add arguments without overriding defaults + ### Housekeeping - Default bukkit version now is 1.16.4 - Update Gradle to 6.7.1 diff --git a/README.md b/README.md index 4fba92e..03324ce 100644 --- a/README.md +++ b/README.md @@ -227,9 +227,9 @@ bukkit { // Set server encoding (flag -Dfile.encoding) encoding = "UTF-8" // JVM arguments - javaArgs = "-Xmx1G" + javaArgs("-Xmx1G") // Bukkit arguments - bukkitArgs = "" + bukkitArgs("nogui") } } ``` diff --git a/build.gradle.kts b/build.gradle.kts index 0e5e906..72bf4da 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,8 @@ plugins { `kotlin-dsl` + `maven-publish` + groovy kotlin("jvm") version "1.4.21" - id("groovy") - id("maven-publish") id("com.gradle.plugin-publish") version "0.12.0" id("com.github.ben-manes.versions") version "0.36.0" } @@ -10,13 +10,14 @@ plugins { java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 + withSourcesJar() } kotlin { explicitApi() } -tasks.test { +tasks.test.configure { useJUnitPlatform() } diff --git a/src/main/kotlin/BukkitExtension.kt b/src/main/kotlin/BukkitExtension.kt index 3452abf..b6bb9f6 100644 --- a/src/main/kotlin/BukkitExtension.kt +++ b/src/main/kotlin/BukkitExtension.kt @@ -4,6 +4,8 @@ import groovy.lang.Closure import org.gradle.api.Project import org.gradle.kotlin.dsl.getByType import org.gradle.util.ConfigureUtil +import org.slf4j.LoggerFactory +import ru.endlesscode.bukkitgradle.extensions.warnSyntaxChanged import ru.endlesscode.bukkitgradle.meta.extension.PluginMetaImpl import ru.endlesscode.bukkitgradle.server.ServerConstants import ru.endlesscode.bukkitgradle.server.extension.ServerConfigurationImpl @@ -16,12 +18,18 @@ public open class BukkitExtension( public override var apiVersion: String = ServerConstants.DEFAULT_VERSION + private val logger = LoggerFactory.getLogger("BukkitExtension") + @Deprecated("Use 'server' instead", ReplaceWith("server")) public val run: ServerConfigurationImpl - get() = server + get() { + logger.warnSyntaxChanged("bukkit.run", "bukkit.server") + return server + } @Deprecated("Use 'server { ... }' instead", ReplaceWith("server(body)")) public fun run(body: Closure) { + logger.warnSyntaxChanged("bukkit.run { ... }", "bukkit.server { ... }") ConfigureUtil.configure(body, server) } @@ -43,6 +51,7 @@ public open class BukkitExtension( @Deprecated("Use apiVersion instead of version.", ReplaceWith("apiVersion = version")) public fun setVersion(version: String) { + logger.warnSyntaxChanged("bukkit.version = '...'", "bukkit.apiVersion = '...'") apiVersion = version } } diff --git a/src/main/kotlin/dependencies/Dependencies.kt b/src/main/kotlin/dependencies/Dependencies.kt index e3babe0..a5d3559 100644 --- a/src/main/kotlin/dependencies/Dependencies.kt +++ b/src/main/kotlin/dependencies/Dependencies.kt @@ -47,7 +47,7 @@ internal object Dependencies { repoExtra["dmulloy2"] = closureOf { repoHandler.addRepo("dmulloy2", URL_DMULLOY2) } repoExtra["md5"] = closureOf { repoHandler.addRepo("md5", URL_MD5) } repoExtra["vault"] = closureOf { repoHandler.addRepo("Vault", URL_VAULT) } - repoExtra["placeholderApi"] = closureOf { repoHandler.addRepo("PlaceholderAPI", URL_PLACEHOLDERAPI) } + repoExtra["placeholderapi"] = closureOf { repoHandler.addRepo("PlaceholderAPI", URL_PLACEHOLDERAPI) } repoExtra["aikar"] = closureOf { repoHandler.addRepo("aikar", URL_AIKAR) } val depExtra = depHandler.extra diff --git a/src/main/kotlin/dependencies/DependenciesExtensions.kt b/src/main/kotlin/dependencies/DependenciesExtensions.kt index dbd9df9..1c29021 100644 --- a/src/main/kotlin/dependencies/DependenciesExtensions.kt +++ b/src/main/kotlin/dependencies/DependenciesExtensions.kt @@ -46,15 +46,14 @@ public fun RepositoryHandler.aikar(configure: MavenArtifactRepository.() -> Unit addRepo("aikar", URL_AIKAR, configure) } -public fun DependencyHandler.spigot(): String { - return api("org.spigotmc", "spigot", "mavenLocal") -} -public fun DependencyHandler.spigotApi(): String { - return api("org.spigotmc", "spigot-api", "spigot") -} -public fun DependencyHandler.bukkit(): String { - return api("org.bukkit", "bukkit", "spigot") -} -public fun DependencyHandler.paperApi(): String { - return api("com.destroystokyo.paper", "paper-api", "papermc") -} +public val DependencyHandler.spigot: String + get() = api("org.spigotmc", "spigot", "mavenLocal") + +public val DependencyHandler.spigotApi: String + get() = api("org.spigotmc", "spigot-api", "spigot") + +public val DependencyHandler.bukkit: String + get() = api("org.bukkit", "bukkit", "spigot") + +public val DependencyHandler.paperApi: String + get() = api("com.destroystokyo.paper", "paper-api", "papermc") diff --git a/src/main/kotlin/extensions/Logger.kt b/src/main/kotlin/extensions/Logger.kt new file mode 100644 index 0000000..741e29c --- /dev/null +++ b/src/main/kotlin/extensions/Logger.kt @@ -0,0 +1,12 @@ +package ru.endlesscode.bukkitgradle.extensions + +import org.slf4j.Logger + +internal fun Logger.warnSyntaxChanged(oldSyntax: String, newSyntax: String) { + warn( + """ + Syntax $oldSyntax is deprecated and will be removed in 1.0 + Replace it with: $newSyntax + """.trimIndent() + ) +} diff --git a/src/main/kotlin/meta/extension/PluginMetaImpl.kt b/src/main/kotlin/meta/extension/PluginMetaImpl.kt index 7e4b12a..47d5526 100644 --- a/src/main/kotlin/meta/extension/PluginMetaImpl.kt +++ b/src/main/kotlin/meta/extension/PluginMetaImpl.kt @@ -5,6 +5,8 @@ import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.kotlin.dsl.listProperty import org.gradle.kotlin.dsl.property +import org.slf4j.LoggerFactory +import ru.endlesscode.bukkitgradle.extensions.warnSyntaxChanged // TODO 1.0: Remove deprecated methods public class PluginMetaImpl(objects: ObjectFactory) : PluginMeta { @@ -16,33 +18,41 @@ public class PluginMetaImpl(objects: ObjectFactory) : PluginMeta { override val url: Property = objects.property() override val authors: ListProperty = objects.listProperty() + private val logger = LoggerFactory.getLogger("PluginMeta") + @Deprecated("Use property syntax instead", ReplaceWith("this.name.set(name)")) public fun setName(name: String) { + logger.warnSyntaxChanged("bukkit.meta.name = '...'", "bukkit.meta.name.set('...')") this.name.set(name) } @Deprecated("Use property syntax instead", ReplaceWith("this.description.set(description)")) public fun setDescription(description: String) { + logger.warnSyntaxChanged("bukkit.meta.description = '...'", "bukkit.meta.description.set('...')") this.description.set(description) } @Deprecated("Use property syntax instead", ReplaceWith("this.main.set(main)")) public fun setMain(main: String) { + logger.warnSyntaxChanged("bukkit.meta.main = '...'", "bukkit.meta.main.set('...')") this.main.set(main) } @Deprecated("Use property syntax instead", ReplaceWith("this.version.set(version)")) public fun setVersion(version: String) { + logger.warnSyntaxChanged("bukkit.meta.version = '...'", "bukkit.meta.version.set('...')") this.version.set(version) } @Deprecated("Use property syntax instead", ReplaceWith("this.url.set(url)")) public fun setUrl(url: String) { + logger.warnSyntaxChanged("bukkit.meta.url = '...'", "bukkit.meta.url.set('...')") this.url.set(url) } @Deprecated("Use property syntax instead", ReplaceWith("this.authors.set(authors)")) public fun setAuthors(authors: List) { + logger.warnSyntaxChanged("bukkit.meta.authors = [...]", "bukkit.meta.authors.set([...])") this.authors.set(authors) } diff --git a/src/main/kotlin/server/DevServerPlugin.kt b/src/main/kotlin/server/DevServerPlugin.kt index b4c8ffe..b2f2cf3 100644 --- a/src/main/kotlin/server/DevServerPlugin.kt +++ b/src/main/kotlin/server/DevServerPlugin.kt @@ -53,14 +53,16 @@ public class DevServerPlugin : Plugin { val downloadPaperclip = registerDownloadPaperclip(coreVersion) val copyServerCore = registerCopyServerCoreTask(buildServerCore, downloadPaperclip, serverDir) - val generateRunningScript = registerGenerateRunningScriptTask(serverDir) val prepareServer = registerPrepareServerTask(copyServerCore, serverDir) - registerRunServerTask(generateRunningScript, prepareServer) + registerRunServerTask(prepareServer, serverDir) registerBuildIdeRunTask(serverDir) } - private fun registerBuildServerCoreTask(buildToolsDir: Provider, coreVersion: Provider): TaskProvider { + private fun registerBuildServerCoreTask( + buildToolsDir: Provider, + coreVersion: Provider + ): TaskProvider { val downloadBuildTools = tasks.register("downloadBuildTools") { group = TASKS_GROUP_BUKKIT description = "Download BuildTools" @@ -95,14 +97,6 @@ public class DevServerPlugin : Plugin { } } - private fun registerGenerateRunningScriptTask(serverDir: Provider): TaskProvider { - return project.tasks.register("generateRunningScript") { - jvmArgs.set(serverConfiguration.buildJvmArgs()) - bukkitArgs.set(serverConfiguration.bukkitArgs) - scriptDir.set(serverDir) - } - } - private fun registerCopyServerCoreTask( buildServerCore: TaskProvider, downloadPaperclip: TaskProvider, @@ -148,11 +142,13 @@ public class DevServerPlugin : Plugin { } private fun registerRunServerTask( - generateRunningScript: TaskProvider, - prepareServer: TaskProvider + prepareServer: TaskProvider, + serverDir: Provider ) { tasks.register("runServer") { - scriptFile.set(generateRunningScript.map { it.scriptFile.get().asFile }) + workingDir(serverDir) + jvmArgs = serverConfiguration.buildJvmArgs() + bukkitArgs = serverConfiguration.bukkitArgs dependsOn(prepareServer) } } @@ -161,6 +157,8 @@ public class DevServerPlugin : Plugin { tasks.register("buildIdeaRun") { configurationName.set("${project.name}: Run server") beforeRunTask.set("prepareServer") + vmParameters.set(serverConfiguration.buildJvmArgs(debug = false)) + programParameters.set(serverConfiguration.bukkitArgs) configurationsDir.set(project.rootProject.layout.projectDirectory.dir(".idea/runConfigurations")) jarPath.set(serverDir.map { it.file(ServerConstants.FILE_CORE).asFile }) } diff --git a/src/main/kotlin/server/extension/ServerConfiguration.kt b/src/main/kotlin/server/extension/ServerConfiguration.kt index 5091a41..e2b58eb 100644 --- a/src/main/kotlin/server/extension/ServerConfiguration.kt +++ b/src/main/kotlin/server/extension/ServerConfiguration.kt @@ -7,16 +7,10 @@ public interface ServerConfiguration { public val onlineMode: Boolean public val debug: Boolean public val encoding: String - public val javaArgs: String - public val bukkitArgs: String + public val javaArgs: List + public val bukkitArgs: List public val coreType: CoreType - /** - * Sets core from string. - * @see coreType - */ - public fun setCore(core: String) - /** Returns arguments for JVM. */ - public fun buildJvmArgs(): String + public fun buildJvmArgs(debug: Boolean = this.debug): List } diff --git a/src/main/kotlin/server/extension/ServerConfigurationImpl.kt b/src/main/kotlin/server/extension/ServerConfigurationImpl.kt index cde6373..527c793 100644 --- a/src/main/kotlin/server/extension/ServerConfigurationImpl.kt +++ b/src/main/kotlin/server/extension/ServerConfigurationImpl.kt @@ -13,12 +13,17 @@ public class ServerConfigurationImpl : ServerConfiguration { override var onlineMode: Boolean = false override var debug: Boolean = true override var encoding: String = "UTF-8" - override var javaArgs: String = "-Xmx1G" - override var bukkitArgs: String = "" + + override var javaArgs: List = listOf("-Xmx1G") + override var bukkitArgs: List = listOf("nogui") override var coreType: CoreType = CoreType.SPIGOT - override fun setCore(core: String) { + /** + * Sets core from string. + * @see coreType + */ + public fun setCore(core: String) { try { coreType = CoreType.valueOf(core.toUpperCase(Locale.ENGLISH)) } catch (_: IllegalArgumentException) { @@ -33,8 +38,18 @@ public class ServerConfigurationImpl : ServerConfiguration { } } - override fun buildJvmArgs(): String { - return "${if (debug) "$DEBUG_ARGS " else ""}-Dfile.encoding=$encoding $javaArgs" + /** Append the given [args] to `javaArgs`. */ + public fun javaArgs(vararg args: String) { + javaArgs = javaArgs + args.toList() + } + + /** Append the given [args] to `bukkitArgs`. */ + public fun bukkitArgs(vararg args: String) { + bukkitArgs = bukkitArgs + args.toList() + } + + override fun buildJvmArgs(debug: Boolean): List { + return listOfNotNull(DEBUG_ARGS.takeIf { debug }, "-Dfile.encoding=$encoding") + javaArgs } override fun toString(): String { diff --git a/src/main/kotlin/server/script/BashScriptStrategy.kt b/src/main/kotlin/server/script/BashScriptStrategy.kt deleted file mode 100644 index 0852530..0000000 --- a/src/main/kotlin/server/script/BashScriptStrategy.kt +++ /dev/null @@ -1,21 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -internal object BashScriptStrategy : RunningScriptStrategy() { - - override val ext: String = "sh" - - override fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String { - //language=bash - return """ - #!/usr/bin/env bash - set -e - - cd "$( dirname "$0" )" - ${buildJavaCommand(jvmArgs, coreFileName, bukkitArgs)} - """.trimIndent() - } - - override fun getCommand(fileName: String, title: String): List { - return listOf("bash", "-c", "chmod +x $fileName && ./$fileName") - } -} diff --git a/src/main/kotlin/server/script/RunningScriptStrategy.kt b/src/main/kotlin/server/script/RunningScriptStrategy.kt deleted file mode 100644 index c4164be..0000000 --- a/src/main/kotlin/server/script/RunningScriptStrategy.kt +++ /dev/null @@ -1,40 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -import org.gradle.internal.os.OperatingSystem - -internal abstract class RunningScriptStrategy { - - /** Returns script file extension. */ - protected abstract val ext: String - - /** Returns script file name. */ - val fileName: String get() = "start.$ext" - - /** Returns script file content as multiline string. */ - abstract fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String - - /** - * Builds and returns server run command - * It is same for any OS - * - * @return Server run command - */ - protected fun buildJavaCommand(jvmArgs: String, coreFileName: String, bukkitArgs: String): String { - return "java $jvmArgs -jar $coreFileName $bukkitArgs".trimEnd() - } - - /** Returns command for ProcessBuilder. */ - abstract fun getCommand(fileName: String, title: String): List - - companion object { - - /** Returns script strategy for current system. */ - fun get(operatingSystem: OperatingSystem): RunningScriptStrategy { - if (operatingSystem.isWindows) { - return WindowsScriptStrategy - } - - return BashScriptStrategy - } - } -} diff --git a/src/main/kotlin/server/script/WindowsScriptStrategy.kt b/src/main/kotlin/server/script/WindowsScriptStrategy.kt deleted file mode 100644 index b08e8dd..0000000 --- a/src/main/kotlin/server/script/WindowsScriptStrategy.kt +++ /dev/null @@ -1,20 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -internal object WindowsScriptStrategy : RunningScriptStrategy() { - - override val ext: String = "bat" - - override fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String { - //language=bat - return """ - @echo off - ${buildJavaCommand(jvmArgs, coreFileName, bukkitArgs)} - pause - exit - """.trimIndent() - } - - override fun getCommand(fileName: String, title: String): List { - return listOf("cmd", "/c", "start", "\"${title}\"", fileName) - } -} diff --git a/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt b/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt index 960f126..ee2899d 100644 --- a/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt +++ b/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt @@ -4,12 +4,14 @@ import groovy.xml.MarkupBuilder import org.gradle.api.DefaultTask import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFile +import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.listProperty import org.gradle.kotlin.dsl.property import org.gradle.kotlin.dsl.withGroovyBuilder import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT @@ -23,10 +25,10 @@ public open class CreateIdeaJarRunConfiguration : DefaultTask() { public val configurationName: Property = project.objects.property() @Input - public val vmParameters: Property = project.objects.property() + public val vmParameters: ListProperty = project.objects.listProperty() @Input - public val programParameters: Property = project.objects.property() + public val programParameters: ListProperty = project.objects.listProperty() @Input public val beforeRunTask: Property = project.objects.property() @@ -46,8 +48,8 @@ public open class CreateIdeaJarRunConfiguration : DefaultTask() { group = TASKS_GROUP_BUKKIT description = "Configure server run configuration for IDEA" - vmParameters.convention("") - programParameters.convention("") + vmParameters.convention(emptyList()) + programParameters.convention(emptyList()) onlyIf { Idea.isActive() } } @@ -68,8 +70,8 @@ public open class CreateIdeaJarRunConfiguration : DefaultTask() { "singleton" to true ) { "option"("name" to "JAR_PATH", "value" to jarPath.get()) - "option"("name" to "VM_PARAMETERS", "value" to vmParameters.get()) - "option"("name" to "PROGRAM_PARAMETERS", "value" to programParameters.get()) + "option"("name" to "VM_PARAMETERS", "value" to vmParameters.get().joinToString(" ")) + "option"("name" to "PROGRAM_PARAMETERS", "value" to programParameters.get().joinToString(" ")) "option"("name" to "WORKING_DIRECTORY", "value" to jarPath.get().parentFile) "method"("v" to 2) { "option"( diff --git a/src/main/kotlin/server/task/DownloadPaperclip.kt b/src/main/kotlin/server/task/DownloadPaperclip.kt index 2e19cef..447a067 100644 --- a/src/main/kotlin/server/task/DownloadPaperclip.kt +++ b/src/main/kotlin/server/task/DownloadPaperclip.kt @@ -26,8 +26,8 @@ public open class DownloadPaperclip @Inject constructor(objects: ObjectFactory) @OutputFile public val paperclipFile: Provider = project.provider { outputFiles.single() } - private val Any.version: Map<*, *> - get() = InvokerHelper.getProperty(this, "version") as Map<*, *> + private val Any.versions: Map<*, *> + get() = InvokerHelper.getProperty(this, "versions") as Map<*, *> init { group = TASKS_GROUP_BUKKIT @@ -44,7 +44,7 @@ public open class DownloadPaperclip @Inject constructor(objects: ObjectFactory) } val jsonObject = JsonSlurper().parse(versionsFile) - val versionsUrls = jsonObject.version + val versionsUrls = jsonObject.versions val paperUrl = versionsUrls[version] as? String if (paperUrl == null) { project.logger.warn( diff --git a/src/main/kotlin/server/task/GenerateRunningScript.kt b/src/main/kotlin/server/task/GenerateRunningScript.kt deleted file mode 100644 index bea601b..0000000 --- a/src/main/kotlin/server/task/GenerateRunningScript.kt +++ /dev/null @@ -1,66 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.task - -import org.gradle.api.DefaultTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFile -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.OutputFile -import org.gradle.api.tasks.TaskAction -import org.gradle.internal.os.OperatingSystem -import org.gradle.kotlin.dsl.property -import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT -import ru.endlesscode.bukkitgradle.server.ServerConstants -import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy -import javax.inject.Inject - -/** Generates script to run server without IDE. */ -public open class GenerateRunningScript @Inject constructor(objects: ObjectFactory) : DefaultTask() { - - @Input - public val jvmArgs: Property = objects.property() - - @Input - public val bukkitArgs: Property = objects.property() - - @Input - public val coreFileName: Property = objects.property() - - @Input - public var osName: String = System.getProperty("os.name") - - @Internal - public val scriptDir: DirectoryProperty = objects.directoryProperty() - - @OutputFile - public val scriptFile: Provider - - private val scriptStrategy = RunningScriptStrategy.get(OperatingSystem.forName(osName)) - - init { - group = TASKS_GROUP_BUKKIT - description = "Generates script to run server without IDE." - - coreFileName.convention(ServerConstants.FILE_CORE) - scriptFile = scriptDir.map { it.file(scriptStrategy.fileName) } - } - - @TaskAction - internal fun generateScript() { - val scriptFile = scriptFile.get().asFile - if (!scriptFile.exists()) { - scriptFile.createNewFile() - } - - scriptFile.writeText( - scriptStrategy.getScriptText( - jvmArgs = jvmArgs.get(), - coreFileName = coreFileName.get(), - bukkitArgs = bukkitArgs.get() - ) - ) - } -} diff --git a/src/main/kotlin/server/task/RunServer.kt b/src/main/kotlin/server/task/RunServer.kt index 74d68b8..fcc5089 100644 --- a/src/main/kotlin/server/task/RunServer.kt +++ b/src/main/kotlin/server/task/RunServer.kt @@ -1,48 +1,28 @@ package ru.endlesscode.bukkitgradle.server.task -import org.gradle.api.DefaultTask -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.TaskAction -import org.gradle.internal.os.OperatingSystem -import org.gradle.kotlin.dsl.property +import org.gradle.api.tasks.JavaExec +import org.gradle.process.CommandLineArgumentProvider import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT -import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy -import java.io.File -import javax.inject.Inject +import ru.endlesscode.bukkitgradle.server.ServerConstants -/** Run dev server from script. */ -public open class RunServer @Inject constructor(objects: ObjectFactory) : DefaultTask() { +public open class RunServer : JavaExec() { @Internal - public val title: Property = objects.property() - - @Input - public val scriptFile: Property = objects.property() - - @Internal - public var osName: String = System.getProperty("os.name") - - private val scriptStrategy = RunningScriptStrategy.get(OperatingSystem.forName(osName)) + public var bukkitArgs: List = emptyList() init { group = TASKS_GROUP_BUKKIT - description = "Run dev server from script." + description = "Run dev server." - title.convention("Dev Server") - outputs.upToDateWhen { false } + mainClass.set("-jar") + argumentProviders.add(RunServerArgumentsProvider()) + standardInput = System.`in` } - @TaskAction - internal fun runServer() { - logger.lifecycle("Starting Server...") - val scriptFile = scriptFile.get() - ProcessBuilder(scriptStrategy.getCommand(scriptFile.name, title.get())) - .redirectErrorStream(true) - .directory(scriptFile.parentFile) - .start() - logger.lifecycle("Server started successfully!") + private inner class RunServerArgumentsProvider : CommandLineArgumentProvider { + override fun asArguments(): Iterable { + return listOf(ServerConstants.FILE_CORE) + bukkitArgs + } } } diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/ServerConfigurationSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/ServerConfigurationSpec.groovy index 5705271..e19d3a0 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/ServerConfigurationSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/ServerConfigurationSpec.groovy @@ -5,52 +5,49 @@ import spock.lang.Specification class ServerConfigurationSpec extends Specification { // SUT - ServerConfigurationImpl runConfiguration + ServerConfigurationImpl serverConfiguration void setup() { - runConfiguration = new ServerConfigurationImpl() + serverConfiguration = new ServerConfigurationImpl() } void 'when build args - should return args with debug flags'() { when: - def args = runConfiguration.buildJvmArgs() + def args = serverConfiguration.buildJvmArgs(true) then: - "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dfile.encoding=UTF-8 -Xmx1G" == args + ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "-Dfile.encoding=UTF-8", "-Xmx1G"] == args } void 'when build args - and debug disabled - should return args without debug flags'() { - given: - runConfiguration.debug = false - when: - def args = runConfiguration.buildJvmArgs() + def args = serverConfiguration.buildJvmArgs(false) then: - "-Dfile.encoding=UTF-8 -Xmx1G" == args + ["-Dfile.encoding=UTF-8", "-Xmx1G"] == args } void 'when set existing core - should set core successfully'() { when: - runConfiguration.core = "paper" + serverConfiguration.core = "paper" then: - CoreType.PAPER == runConfiguration.coreType + CoreType.PAPER == serverConfiguration.coreType } void 'when set existing core in mixed case - should set core successfully'() { when: - runConfiguration.core = "Paper" + serverConfiguration.core = "Paper" then: - CoreType.PAPER == runConfiguration.coreType + CoreType.PAPER == serverConfiguration.coreType } void 'when set not existing core - should fallback to spigot core'() { when: - runConfiguration.core = "uber-bukkit" + serverConfiguration.core = "uber-bukkit" then: - CoreType.SPIGOT == runConfiguration.coreType + CoreType.SPIGOT == serverConfiguration.coreType } } diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfigurationSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfigurationSpec.groovy index ad9f920..61f2161 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfigurationSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfigurationSpec.groovy @@ -42,8 +42,8 @@ class CreateIdeaJarRunConfigurationSpec extends PluginSpecification {