From aaf50cfaf591dcb189f1322c12e227c9c9c4e669 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Sat, 2 Jan 2021 14:37:08 +0300 Subject: [PATCH 01/18] kotlin: Move CreateIdeaJarRunConfiguration to Kotlin --- .../bukkitgradle/DevServerPlugin.groovy | 3 +- .../task/CreateIdeaJarRunConfiguration.groovy | 78 ----------------- .../bukkitgradle/server/util/Idea.groovy | 18 ---- src/main/kotlin/package.kt | 1 - .../task/CreateIdeaJarRunConfiguration.kt | 84 +++++++++++++++++++ src/main/kotlin/server/util/Idea.kt | 15 ++++ .../CreateIdeaJarRunConfigurationSpec.groovy | 28 +++---- 7 files changed, 113 insertions(+), 114 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfiguration.groovy delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/util/Idea.groovy delete mode 100644 src/main/kotlin/package.kt create mode 100644 src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt create mode 100644 src/main/kotlin/server/util/Idea.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy index 8300118..57a6800 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy @@ -32,8 +32,7 @@ class DevServerPlugin implements Plugin { configurationName.set("$project.name: Run server") beforeRunTask.set('prepareServer') configurationsDir.set(project.rootProject.layout.projectDirectory.dir('.idea/runConfigurations')) - jarPath.set(prepareServer.get().serverDir - .map { it.file(ServerConstants.FILE_CORE).asFile.path }) + jarPath.set(prepareServer.map { it.serverDir.file(ServerConstants.FILE_CORE).get().asFile }) } } } diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfiguration.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfiguration.groovy deleted file mode 100644 index 5c9d557..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfiguration.groovy +++ /dev/null @@ -1,78 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.task - -import groovy.xml.MarkupBuilder -import org.gradle.api.DefaultTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.TaskAction -import ru.endlesscode.bukkitgradle.BukkitGradlePlugin -import ru.endlesscode.bukkitgradle.server.util.Idea - -/** - * Builds and writes to file run configuration in IDEA .xml format - */ -class CreateIdeaJarRunConfiguration extends DefaultTask { - - @Input - final Property configurationName = project.objects.property(String) - - @Input - final Property vmParameters = project.objects.property(String) - - @Input - final Property programParameters = project.objects.property(String) - - @Input - final Property beforeRunTask = project.objects.property(String) - - @Input - final Property jarPath = project.objects.property(String) - - @OutputDirectory - final DirectoryProperty configurationsDir = project.objects.directoryProperty() - - CreateIdeaJarRunConfiguration() { - group = BukkitGradlePlugin.GROUP - description = 'Configure server run configuration for IDEA' - - vmParameters.convention('') - programParameters.convention('') - - onlyIf { Idea.isActive() } - } - - @TaskAction - def createJarRunConfiguration() { - def configurationName = configurationName.get() - def configurationsDir = configurationsDir.get() - - configurationsDir.asFile.mkdirs() - - def runConfigurationFile = configurationsDir - .file("${Idea.fileNameSlug(configurationName)}.xml") - .asFile - - def xml = new MarkupBuilder(runConfigurationFile.newWriter('UTF-8')) - xml.component(name: 'ProjectRunConfigurationManager') { - configuration( - default: 'false', - name: configurationName, - type: 'JarApplication', - singleton: 'true' - ) { - option(name: 'JAR_PATH', value: jarPath.get()) - option(name: 'VM_PARAMETERS', value: vmParameters.get()) - option(name: 'PROGRAM_PARAMETERS', value: programParameters.get()) - option(name: 'WORKING_DIRECTORY', value: new File(jarPath.get()).parentFile) - method(v: 2) { - option(name: 'Gradle.BeforeRunTask', - enabled: 'true', - tasks: beforeRunTask.get(), - externalProjectPath: '$PROJECT_DIR$') - } - } - } - } -} diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/util/Idea.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/util/Idea.groovy deleted file mode 100644 index 0a3a183..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/util/Idea.groovy +++ /dev/null @@ -1,18 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.util - -class Idea { - - static final IDEA_ACTIVE = 'idea.active' - - private Idea() {} - - static boolean isActive() { - return System.getProperty(IDEA_ACTIVE) == 'true' - } - - static String fileNameSlug(String name) { - return name - .replaceAll(/[^\x20-\x7E]/, '') - .replaceAll(/[^a-zA-Z]/, '_') - } -} diff --git a/src/main/kotlin/package.kt b/src/main/kotlin/package.kt deleted file mode 100644 index 4f94c61..0000000 --- a/src/main/kotlin/package.kt +++ /dev/null @@ -1 +0,0 @@ -package ru.endlesscode.bukkitgradle diff --git a/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt b/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt new file mode 100644 index 0000000..7cb4ffe --- /dev/null +++ b/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt @@ -0,0 +1,84 @@ +package ru.endlesscode.bukkitgradle.server.task + +import groovy.xml.MarkupBuilder +import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.property +import org.gradle.kotlin.dsl.withGroovyBuilder +import ru.endlesscode.bukkitgradle.PLUGINS_GROUP +import ru.endlesscode.bukkitgradle.server.util.Idea +import java.io.File + +/** + * Builds and writes to file run configuration in IDEA .xml format + */ +public open class CreateIdeaJarRunConfiguration : DefaultTask() { + + @Input + public val configurationName: Property = project.objects.property() + + @Input + public val vmParameters: Property = project.objects.property() + + @Input + public val programParameters: Property = project.objects.property() + + @Input + public val beforeRunTask: Property = project.objects.property() + + @Input + public val jarPath: Property = project.objects.property() + + @OutputDirectory + public val configurationsDir: DirectoryProperty = project.objects.directoryProperty() + + init { + group = PLUGINS_GROUP + description = "Configure server run configuration for IDEA" + + vmParameters.convention("") + programParameters.convention("") + + onlyIf { Idea.isActive() } + } + + @TaskAction + public fun createJarRunConfiguration() { + val configurationName = configurationName.get() + val configurationsDir = configurationsDir.get() + + configurationsDir.asFile.mkdirs() + + val runConfigurationFile = configurationsDir + .file("${Idea.fileNameSlug(configurationName)}.xml") + .asFile + + MarkupBuilder(runConfigurationFile.writer()).withGroovyBuilder { + "component"("name" to "ProjectRunConfigurationManager") { + "configuration"( + "default" to false, + "name" to configurationName, + "type" to "JarApplication", + "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 "WORKING_DIRECTORY", "value" to jarPath.get().parentFile) + "method"("v" to 2) { + "option"( + "name" to "Gradle.BeforeRunTask", + "enabled" to true, + "tasks" to beforeRunTask.get(), + "externalProjectPath" to "\$PROJECT_DIR$" + ) + } + } + } + } + } +} diff --git a/src/main/kotlin/server/util/Idea.kt b/src/main/kotlin/server/util/Idea.kt new file mode 100644 index 0000000..782c7d2 --- /dev/null +++ b/src/main/kotlin/server/util/Idea.kt @@ -0,0 +1,15 @@ +package ru.endlesscode.bukkitgradle.server.util + +internal object Idea { + + private const val IDEA_ACTIVE: String = "idea.active" + + fun isActive(): Boolean = System.getProperty(IDEA_ACTIVE) == "true" + + @JvmStatic + fun fileNameSlug(name: String): String { + return name + .replace(Regex("[^\\x20-\\x7E]"), "") + .replace(Regex("[^a-zA-Z]"), "_") + } +} 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 669f22b..160ed0a 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfigurationSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/CreateIdeaJarRunConfigurationSpec.groovy @@ -33,27 +33,25 @@ class CreateIdeaJarRunConfigurationSpec extends PluginSpecification { '''.stripIndent() def serverDir = "${project.buildDir}/server/1.15.2" - def expectedLines = [ - "", - " ", - " ", - "" - ] when: runner.withArguments(TASK_NAME, IDEA_ACTIVE_PROPERTY).build() and: - def lines = file('.idea/runConfigurations/test_plugin__Run_server.xml').readLines() + def text = file('.idea/runConfigurations/test_plugin__Run_server.xml').text then: - expectedLines == lines + text == """\ + + + + """.stripIndent() } } From 4bdcc9068fba9e636a1db93185716c5cb9aaf286 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 10:38:49 +0300 Subject: [PATCH 02/18] kotlin: Move CoreType to Kotlin --- .../ru/endlesscode/bukkitgradle/server/CoreType.groovy | 6 ------ .../ru/endlesscode/bukkitgradle/server/ServerCore.groovy | 1 + .../bukkitgradle/server/extension/RunConfiguration.groovy | 3 +-- src/main/kotlin/server/extension/CoreType.kt | 6 ++++++ .../server/extension/RunConfigurationSpec.groovy | 1 - 5 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/CoreType.groovy create mode 100644 src/main/kotlin/server/extension/CoreType.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/CoreType.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/CoreType.groovy deleted file mode 100644 index 5a29437..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/CoreType.groovy +++ /dev/null @@ -1,6 +0,0 @@ -package ru.endlesscode.bukkitgradle.server - -/** Supported server core types to run. */ -enum CoreType { - SPIGOT, PAPER -} diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy index 6bc0fd8..df3c2a1 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy @@ -9,6 +9,7 @@ import org.gradle.api.tasks.JavaExec import ru.endlesscode.bukkitgradle.BukkitGroovy import ru.endlesscode.bukkitgradle.BukkitGradlePlugin import ru.endlesscode.bukkitgradle.server.util.MavenApi +import ru.endlesscode.bukkitgradle.server.extension.CoreType import javax.annotation.Nullable diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy index 3d27953..11f437e 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy @@ -2,7 +2,6 @@ package ru.endlesscode.bukkitgradle.server.extension import org.slf4j.Logger import org.slf4j.LoggerFactory -import ru.endlesscode.bukkitgradle.server.CoreType class RunConfiguration implements Serializable { @@ -24,7 +23,7 @@ class RunConfiguration implements Serializable { coreType = CoreType.valueOf(core.toUpperCase(Locale.ENGLISH)) } catch (IllegalArgumentException ignored) { logger.warn(""" - Core type '$core' not found. May be it doesn't supported by BukkitGradle yet. + Core type '$core' not found. May be it doesn't supported by BukkitGradle yet. Fallback core type is '${coreType.name()}'. Supported types: ${CoreType.values().join(', ')} Write an issue on GitHub to request support of other cores. diff --git a/src/main/kotlin/server/extension/CoreType.kt b/src/main/kotlin/server/extension/CoreType.kt new file mode 100644 index 0000000..6c97f21 --- /dev/null +++ b/src/main/kotlin/server/extension/CoreType.kt @@ -0,0 +1,6 @@ +package ru.endlesscode.bukkitgradle.server.extension + +/** Supported server core types to run. */ +public enum class CoreType { + SPIGOT, PAPER +} diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfigurationSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfigurationSpec.groovy index be435d1..880dadc 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfigurationSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfigurationSpec.groovy @@ -1,6 +1,5 @@ package ru.endlesscode.bukkitgradle.server.extension -import ru.endlesscode.bukkitgradle.server.CoreType import spock.lang.Specification class RunConfigurationSpec extends Specification { From ab518295d3407a6eb7dfa67376f999d86eebd1d7 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 10:50:35 +0300 Subject: [PATCH 03/18] kotlin: Move RunConfiguration to Kotlin --- .../server/extension/RunConfiguration.groovy | 57 ------------------ .../server/extension/RunConfiguration.kt | 60 +++++++++++++++++++ 2 files changed, 60 insertions(+), 57 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy create mode 100644 src/main/kotlin/server/extension/RunConfiguration.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy deleted file mode 100644 index 11f437e..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/extension/RunConfiguration.groovy +++ /dev/null @@ -1,57 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.extension - -import org.slf4j.Logger -import org.slf4j.LoggerFactory - -class RunConfiguration implements Serializable { - - private static final String DEBUG_ARGS = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" - - private transient Logger logger = LoggerFactory.getLogger("RunConfiguration") - - boolean eula = false - boolean onlineMode = false - boolean debug = true - String encoding = 'UTF-8' - String javaArgs = '-Xmx1G' - String bukkitArgs = '' - - private CoreType coreType = CoreType.SPIGOT - - void setCore(String core) { - try { - coreType = CoreType.valueOf(core.toUpperCase(Locale.ENGLISH)) - } catch (IllegalArgumentException ignored) { - logger.warn(""" - Core type '$core' not found. May be it doesn't supported by BukkitGradle yet. - Fallback core type is '${coreType.name()}'. - Supported types: ${CoreType.values().join(', ')} - Write an issue on GitHub to request support of other cores. - """.stripIndent()) - } - } - - CoreType getCoreType() { - return coreType - } - - /** - * Returns arguments for JVM - */ - String buildJvmArgs(boolean debug = this.debug) { - return "${debug ? "$DEBUG_ARGS " : ''}-Dfile.encoding=$encoding $javaArgs" - } - - @Override - String toString() { - return "RunConfiguration{" + - "eula=$eula" + - ", onlineMode=$onlineMode" + - ", debug=$debug" + - ", encoding='$encoding'" + - ", javaArgs='$javaArgs'" + - ", bukkitArgs='$bukkitArgs'" + - ", coreType=$coreType" + - "}" - } -} diff --git a/src/main/kotlin/server/extension/RunConfiguration.kt b/src/main/kotlin/server/extension/RunConfiguration.kt new file mode 100644 index 0000000..7329f68 --- /dev/null +++ b/src/main/kotlin/server/extension/RunConfiguration.kt @@ -0,0 +1,60 @@ +package ru.endlesscode.bukkitgradle.server.extension + +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.util.* + +public class RunConfiguration { + + private val logger: Logger = LoggerFactory.getLogger("RunConfiguration") + + public var eula: Boolean = false + public var onlineMode: Boolean = false + public var debug: Boolean = true + public var encoding: String = "UTF-8" + public var javaArgs: String = "-Xmx1G" + public var bukkitArgs: String = "" + + private var coreType: CoreType = CoreType.SPIGOT + + public fun setCore(core: String) { + try { + coreType = CoreType.valueOf(core.toUpperCase(Locale.ENGLISH)) + } catch (_: IllegalArgumentException) { + logger.warn( + """ + Core type '$core' not found. May be it doesn't supported by BukkitGradle yet. + Fallback core type is '${coreType.name}'. + Supported types: ${CoreType.values().joinToString(", ")} + Write an issue on GitHub to request support of other cores. + """.trimIndent() + ) + } + } + + public fun getCoreType(): CoreType { + return coreType + } + + /** Returns arguments for JVM. */ + @JvmOverloads + public fun buildJvmArgs(debug: Boolean = this.debug): String { + return "${if (debug) "$DEBUG_ARGS " else ""}-Dfile.encoding=$encoding $javaArgs" + } + + override fun toString(): String { + return "RunConfiguration{" + + "eula=$eula" + + ", onlineMode=$onlineMode" + + ", debug=$debug" + + ", encoding='$encoding'" + + ", javaArgs='$javaArgs'" + + ", bukkitArgs='$bukkitArgs'" + + ", coreType=$coreType" + + "}" + } + + private companion object { + const val DEBUG_ARGS: String = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" + } +} From 9e219e857f4078dfb03561fb623ce012acdc350a Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 11:21:39 +0300 Subject: [PATCH 04/18] kotlin: Move Constants to Kotlin --- .../bukkitgradle/server/Constants.groovy | 21 ---------------- src/main/kotlin/server/Constants.kt | 24 +++++++++++++++++++ 2 files changed, 24 insertions(+), 21 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/Constants.groovy create mode 100644 src/main/kotlin/server/Constants.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/Constants.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/Constants.groovy deleted file mode 100644 index 1f17e8c..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/Constants.groovy +++ /dev/null @@ -1,21 +0,0 @@ -package ru.endlesscode.bukkitgradle.server - -class ServerConstants { - public static final String FALLBACK_VERSION = "1.16.2" - public static final String FILE_CORE = "core.jar" - - public static final String FILE_BUILDTOOLS = "BuildTools.jar" - public static final String FILE_MAVEN_METADATA = "maven-metadata.xml" - - public static final String URL_SPIGOT_METADATA = "https://hub.spigotmc.org/nexus/content/repositories/snapshots/org/spigotmc/spigot-api/$FILE_MAVEN_METADATA" -} - -class PaperConstants { - public static final String FALLBACK_VERSION = "1.16.1" - - public static final String FILE_PAPERCLIP = "paperclip.jar" - public static final String FILE_PAPER_VERSIONS = "paper-versions.json" - - public static final String URL_PAPER_VERSIONS = "https://gist.githubusercontent.com/osipxd/6119732e30059241c2192c4a8d2218d9/raw/7d2b9f6eaa982edebf1147ece8439dacd5f33d16/$FILE_PAPER_VERSIONS" - public static final String URL_PAPER_DEFAULT = "https://papermc.io/ci/job/Paper-1.15/lastSuccessfulBuild/artifact/paperclip.jar" -} diff --git a/src/main/kotlin/server/Constants.kt b/src/main/kotlin/server/Constants.kt new file mode 100644 index 0000000..ea362c1 --- /dev/null +++ b/src/main/kotlin/server/Constants.kt @@ -0,0 +1,24 @@ +package ru.endlesscode.bukkitgradle.server + +public object ServerConstants { + public const val FALLBACK_VERSION: String = "1.16.2" + public const val FILE_CORE: String = "core.jar" + + public const val FILE_BUILDTOOLS: String = "BuildTools.jar" + public const val FILE_MAVEN_METADATA: String = "maven-metadata.xml" + + public const val URL_SPIGOT_METADATA: String = + "https://hub.spigotmc.org/nexus/content/repositories/snapshots/org/spigotmc/spigot-api/$FILE_MAVEN_METADATA" +} + +public object PaperConstants { + public const val FALLBACK_VERSION: String = "1.16.1" + + public const val FILE_PAPERCLIP: String = "paperclip.jar" + public const val FILE_PAPER_VERSIONS: String = "paper-versions.json" + + public const val URL_PAPER_VERSIONS: String = + "https://gist.githubusercontent.com/osipxd/6119732e30059241c2192c4a8d2218d9/raw/7d2b9f6eaa982edebf1147ece8439dacd5f33d16/$FILE_PAPER_VERSIONS" + public const val URL_PAPER_DEFAULT: String = + "https://papermc.io/ci/job/Paper-1.15/lastSuccessfulBuild/artifact/paperclip.jar" +} From 96cf5039534db9425907ae0f035e15c6221d0c72 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 11:29:47 +0300 Subject: [PATCH 05/18] kotlin: Move RunningScript to Kotlin --- .../server/script/RunningScript.groovy | 94 ------------------- .../kotlin/server/script/RunningScript.kt | 82 ++++++++++++++++ 2 files changed, 82 insertions(+), 94 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/script/RunningScript.groovy create mode 100644 src/main/kotlin/server/script/RunningScript.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/RunningScript.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/RunningScript.groovy deleted file mode 100644 index ea1e600..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/RunningScript.groovy +++ /dev/null @@ -1,94 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -import org.gradle.internal.os.OperatingSystem -import ru.endlesscode.bukkitgradle.server.ServerConstants -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration - -abstract class RunningScript { - - protected RunConfiguration configuration - private String version - - RunningScript(RunConfiguration configuration, String version) { - this.configuration = configuration - this.version = version - } - - /** - * Generates script file on given directory - * - * @param dir The directory - */ - void buildOn(File dir) { - def scriptFile = new File(dir, getFileName()) - if (!scriptFile.exists()) { - scriptFile.createNewFile() - } - - scriptFile.text = this.getScriptText() - } - - /** - * Returns script file name - * - * @return Script name - */ - protected String getFileName() { - return "start.${getExt()}" - } - - /** - * Returns script file extension - * - * @return File extension - */ - protected abstract String getExt() - - /** - * Returns script file content as multiline string - * - * @return Script text - */ - protected abstract String getScriptText() - - /** - * Builds and returns server run command - * It is same for any OS - * - * @return Server run command - */ - protected String buildRunCommand() { - "java ${configuration.buildJvmArgs()} -jar ${ServerConstants.FILE_CORE} ${configuration.bukkitArgs}" - } - - /** - * Returns command for ProcessBuilder - * - * @return Command - */ - abstract List getCommand() - - /** - * Gets title for console window - * - * @return The title - */ - protected String getTitle() { - return "Dev Server (v$version)" - } - - /** - * Returns start script for current system - * - * @param configuration Run configuration - * @param version Server version - * @return The script - */ - static RunningScript getScript(RunConfiguration configuration, String version) { - if (OperatingSystem.current().isWindows()) { - return new WindowsScript(configuration, version) - } - - return new BashScript(configuration, version) - } -} diff --git a/src/main/kotlin/server/script/RunningScript.kt b/src/main/kotlin/server/script/RunningScript.kt new file mode 100644 index 0000000..161d7c0 --- /dev/null +++ b/src/main/kotlin/server/script/RunningScript.kt @@ -0,0 +1,82 @@ +package ru.endlesscode.bukkitgradle.server.script + +import org.gradle.internal.os.OperatingSystem +import ru.endlesscode.bukkitgradle.server.ServerConstants +import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration +import java.io.File + +public abstract class RunningScript( + protected val configuration: RunConfiguration, + private val version: String +) { + + /** + * Generates script file on given directory + * + * @param dir The directory + */ + public fun buildOn(dir: File) { + val scriptFile = File(dir, getFileName()) + if (!scriptFile.exists()) { + scriptFile.createNewFile() + } + + scriptFile.writeText(this.getScriptText()) + } + + /** + * Returns script file name + * + * @return Script name + */ + protected fun getFileName(): String = "start.${getExt()}" + + /** + * Returns script file extension + * + * @return File extension + */ + protected abstract fun getExt(): String + + /** + * Returns script file content as multiline string + * + * @return Script text + */ + protected abstract fun getScriptText(): String + + /** + * Builds and returns server run command + * It is same for any OS + * + * @return Server run command + */ + protected fun buildRunCommand(): String { + return "java ${configuration.buildJvmArgs()} -jar ${ServerConstants.FILE_CORE} ${configuration.bukkitArgs}" + } + + /** Returns command for ProcessBuilder. */ + public abstract fun getCommand(): List + + /** Gets title for console window. */ + protected fun getTitle(): String = "Dev Server (v$version)" + + public companion object { + + /** + * Returns start script for current system + * + * @param configuration Run configuration + * @param version Server version + * @return The script + */ + @JvmStatic + public fun getScript(configuration: RunConfiguration, version: String): RunningScript { + if (OperatingSystem.current().isWindows) { + return WindowsScript(configuration, version) + } + + return BashScript(configuration, version) + } + } +} From 04b3905b93c8ad9ddae7ca2e633275068be13880 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 11:40:10 +0300 Subject: [PATCH 06/18] kotlin: Move scripts to Kotlin --- .../server/script/BashScript.groovy | 32 ------------- .../server/script/WindowsScript.groovy | 32 ------------- src/main/kotlin/server/script/BashScript.kt | 22 +++++++++ .../kotlin/server/script/RunningScript.kt | 46 ++++++------------- .../kotlin/server/script/WindowsScript.kt | 24 ++++++++++ 5 files changed, 61 insertions(+), 95 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/script/BashScript.groovy delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/script/WindowsScript.groovy create mode 100644 src/main/kotlin/server/script/BashScript.kt create mode 100644 src/main/kotlin/server/script/WindowsScript.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/BashScript.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/BashScript.groovy deleted file mode 100644 index 8d037c5..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/BashScript.groovy +++ /dev/null @@ -1,32 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration - -class BashScript extends RunningScript { - - BashScript(RunConfiguration configuration, String version) { - super(configuration, version) - } - - @Override - protected String getExt() { - return "sh" - } - - @Override - protected String getScriptText() { - //language=bash - $/ - #!/usr/bin/env bash - - cd "$( dirname "$0" )" - ${buildRunCommand()} - /$.stripIndent() - } - - @Override - List getCommand() { - String scriptName = getFileName() - return ["chmod +x $scriptName", "&&", "./$scriptName"] - } -} diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/WindowsScript.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/WindowsScript.groovy deleted file mode 100644 index 7cdf75f..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/script/WindowsScript.groovy +++ /dev/null @@ -1,32 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration - -class WindowsScript extends RunningScript { - - WindowsScript(RunConfiguration configuration, String version) { - super(configuration, version) - } - - @Override - protected String getExt() { - return "bat" - } - - @Override - protected String getScriptText() { - //language=bat - $/ - @echo off - ${buildRunCommand()} - pause - exit - /$.stripIndent() - } - - @Override - List getCommand() { - String title = "\"${getTitle()}\"" - return ["cmd", "/c", "start", title, getFileName()] - } -} diff --git a/src/main/kotlin/server/script/BashScript.kt b/src/main/kotlin/server/script/BashScript.kt new file mode 100644 index 0000000..0d03eec --- /dev/null +++ b/src/main/kotlin/server/script/BashScript.kt @@ -0,0 +1,22 @@ +package ru.endlesscode.bukkitgradle.server.script + +import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration + +public class BashScript(configuration: RunConfiguration, version: String) : RunningScript(configuration, version) { + + override val ext: String = "sh" + + override fun getScriptText(): String { + //language=bash + return """ + #!/usr/bin/env bash + + cd "$( dirname "$0" )" + ${buildRunCommand()} + """.trimIndent() + } + + override fun getCommand(): List { + return listOf("chmod +x $fileName", "&&", "./$fileName") + } +} diff --git a/src/main/kotlin/server/script/RunningScript.kt b/src/main/kotlin/server/script/RunningScript.kt index 161d7c0..1ca8216 100644 --- a/src/main/kotlin/server/script/RunningScript.kt +++ b/src/main/kotlin/server/script/RunningScript.kt @@ -6,17 +6,22 @@ import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration import java.io.File public abstract class RunningScript( - protected val configuration: RunConfiguration, - private val version: String + private val configuration: RunConfiguration, + version: String ) { - /** - * Generates script file on given directory - * - * @param dir The directory - */ - public fun buildOn(dir: File) { - val scriptFile = File(dir, getFileName()) + /** Returns title for console window. */ + protected val title: String = "Dev Server (v$version)" + + /** Returns script file extension. */ + protected abstract val ext: String + + /** Returns script file name. */ + protected val fileName: String get() = "start.$ext" + + /** Generates script file in the given [directory]. */ + public fun buildOn(directory: File) { + val scriptFile = File(directory, fileName) if (!scriptFile.exists()) { scriptFile.createNewFile() } @@ -24,25 +29,7 @@ public abstract class RunningScript( scriptFile.writeText(this.getScriptText()) } - /** - * Returns script file name - * - * @return Script name - */ - protected fun getFileName(): String = "start.${getExt()}" - - /** - * Returns script file extension - * - * @return File extension - */ - protected abstract fun getExt(): String - - /** - * Returns script file content as multiline string - * - * @return Script text - */ + /** Returns script file content as multiline string. */ protected abstract fun getScriptText(): String /** @@ -58,9 +45,6 @@ public abstract class RunningScript( /** Returns command for ProcessBuilder. */ public abstract fun getCommand(): List - /** Gets title for console window. */ - protected fun getTitle(): String = "Dev Server (v$version)" - public companion object { /** diff --git a/src/main/kotlin/server/script/WindowsScript.kt b/src/main/kotlin/server/script/WindowsScript.kt new file mode 100644 index 0000000..5f89b09 --- /dev/null +++ b/src/main/kotlin/server/script/WindowsScript.kt @@ -0,0 +1,24 @@ +package ru.endlesscode.bukkitgradle.server.script + +import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration + +public class WindowsScript(configuration: RunConfiguration, version: String) : RunningScript(configuration, version) { + + override val ext: String = "bat" + + override fun getScriptText(): String { + //language=bat + return """ + @echo off + ${buildRunCommand()} + pause + exit + """.trimIndent() + } + + @Override + override fun getCommand(): List { + val title = "\"${title}\"" + return listOf("cmd", "/c", "start", title, fileName) + } +} From ce64e7de0904b0265dbbeb509e1b8884780c79e5 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 11:53:42 +0300 Subject: [PATCH 07/18] refactor: RunningScript -> RunningScriptStrategy --- .../bukkitgradle/server/task/RunServer.groovy | 12 ++-- src/main/kotlin/server/script/BashScript.kt | 22 ------- .../server/script/BashScriptStrategy.kt | 20 ++++++ .../kotlin/server/script/RunningScript.kt | 66 ------------------- .../server/script/RunningScriptStrategy.kt | 54 +++++++++++++++ ...dowsScript.kt => WindowsScriptStrategy.kt} | 11 ++-- 6 files changed, 83 insertions(+), 102 deletions(-) delete mode 100644 src/main/kotlin/server/script/BashScript.kt create mode 100644 src/main/kotlin/server/script/BashScriptStrategy.kt delete mode 100644 src/main/kotlin/server/script/RunningScript.kt create mode 100644 src/main/kotlin/server/script/RunningScriptStrategy.kt rename src/main/kotlin/server/script/{WindowsScript.kt => WindowsScriptStrategy.kt} (50%) diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy index c032a88..d296cae 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy @@ -4,8 +4,7 @@ import org.gradle.api.DefaultTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import ru.endlesscode.bukkitgradle.server.ServerCore -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration -import ru.endlesscode.bukkitgradle.server.script.RunningScript +import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy class RunServer extends DefaultTask { @Input @@ -13,22 +12,21 @@ class RunServer extends DefaultTask { @TaskAction void runServer() { - RunningScript script = this.createStartScript() + RunningScriptStrategy script = this.createStartScript() logger.lifecycle("Running script built!") logger.lifecycle("Starting Server...") this.runScript(script) logger.lifecycle("Server started successfully!") } - RunningScript createStartScript() { - RunConfiguration configuration = project.bukkit.run - RunningScript script = RunningScript.getScript(configuration, core.simpleVersion) + RunningScriptStrategy createStartScript() { + RunningScriptStrategy script = RunningScriptStrategy.get() script.buildOn(this.core.serverDir) return script } - void runScript(RunningScript script) { + void runScript(RunningScriptStrategy script) { new ProcessBuilder(script.command) .redirectErrorStream(true) .directory(core.serverDir) diff --git a/src/main/kotlin/server/script/BashScript.kt b/src/main/kotlin/server/script/BashScript.kt deleted file mode 100644 index 0d03eec..0000000 --- a/src/main/kotlin/server/script/BashScript.kt +++ /dev/null @@ -1,22 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration - -public class BashScript(configuration: RunConfiguration, version: String) : RunningScript(configuration, version) { - - override val ext: String = "sh" - - override fun getScriptText(): String { - //language=bash - return """ - #!/usr/bin/env bash - - cd "$( dirname "$0" )" - ${buildRunCommand()} - """.trimIndent() - } - - override fun getCommand(): List { - return listOf("chmod +x $fileName", "&&", "./$fileName") - } -} diff --git a/src/main/kotlin/server/script/BashScriptStrategy.kt b/src/main/kotlin/server/script/BashScriptStrategy.kt new file mode 100644 index 0000000..7eddb21 --- /dev/null +++ b/src/main/kotlin/server/script/BashScriptStrategy.kt @@ -0,0 +1,20 @@ +package ru.endlesscode.bukkitgradle.server.script + +public object BashScriptStrategy : RunningScriptStrategy() { + + override val ext: String = "sh" + + override fun getScriptText(jvmArgs: String, bukkitArgs: String): String { + //language=bash + return """ + #!/usr/bin/env bash + + cd "$( dirname "$0" )" + ${buildJavaCommand(jvmArgs, bukkitArgs)} + """.trimIndent() + } + + override fun getCommand(title: String): List { + return listOf("chmod +x $fileName", "&&", "./$fileName") + } +} diff --git a/src/main/kotlin/server/script/RunningScript.kt b/src/main/kotlin/server/script/RunningScript.kt deleted file mode 100644 index 1ca8216..0000000 --- a/src/main/kotlin/server/script/RunningScript.kt +++ /dev/null @@ -1,66 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.script - -import org.gradle.internal.os.OperatingSystem -import ru.endlesscode.bukkitgradle.server.ServerConstants -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration -import java.io.File - -public abstract class RunningScript( - private val configuration: RunConfiguration, - version: String -) { - - /** Returns title for console window. */ - protected val title: String = "Dev Server (v$version)" - - /** Returns script file extension. */ - protected abstract val ext: String - - /** Returns script file name. */ - protected val fileName: String get() = "start.$ext" - - /** Generates script file in the given [directory]. */ - public fun buildOn(directory: File) { - val scriptFile = File(directory, fileName) - if (!scriptFile.exists()) { - scriptFile.createNewFile() - } - - scriptFile.writeText(this.getScriptText()) - } - - /** Returns script file content as multiline string. */ - protected abstract fun getScriptText(): String - - /** - * Builds and returns server run command - * It is same for any OS - * - * @return Server run command - */ - protected fun buildRunCommand(): String { - return "java ${configuration.buildJvmArgs()} -jar ${ServerConstants.FILE_CORE} ${configuration.bukkitArgs}" - } - - /** Returns command for ProcessBuilder. */ - public abstract fun getCommand(): List - - public companion object { - - /** - * Returns start script for current system - * - * @param configuration Run configuration - * @param version Server version - * @return The script - */ - @JvmStatic - public fun getScript(configuration: RunConfiguration, version: String): RunningScript { - if (OperatingSystem.current().isWindows) { - return WindowsScript(configuration, version) - } - - return BashScript(configuration, version) - } - } -} diff --git a/src/main/kotlin/server/script/RunningScriptStrategy.kt b/src/main/kotlin/server/script/RunningScriptStrategy.kt new file mode 100644 index 0000000..b16f96d --- /dev/null +++ b/src/main/kotlin/server/script/RunningScriptStrategy.kt @@ -0,0 +1,54 @@ +package ru.endlesscode.bukkitgradle.server.script + +import org.gradle.internal.os.OperatingSystem +import ru.endlesscode.bukkitgradle.server.ServerConstants +import java.io.File + +public abstract class RunningScriptStrategy { + + /** Returns script file extension. */ + protected abstract val ext: String + + /** Returns script file name. */ + protected val fileName: String get() = "start.$ext" + + /** Generates script file in the given [directory]. */ + public fun buildOn(directory: File) { + val scriptFile = File(directory, fileName) + if (!scriptFile.exists()) { + scriptFile.createNewFile() + } + + // FIXME + //scriptFile.writeText(this.getScriptText(, )) + } + + /** Returns script file content as multiline string. */ + protected abstract fun getScriptText(jvmArgs: 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, bukkitArgs: String): String { + return "java $jvmArgs -jar ${ServerConstants.FILE_CORE} $bukkitArgs" + } + + /** Returns command for ProcessBuilder. */ + public abstract fun getCommand(title: String): List + + public companion object { + + /** Returns start script for current system. */ + @JvmStatic + public fun get(): RunningScriptStrategy { + if (OperatingSystem.current().isWindows) { + return WindowsScriptStrategy + } + + return BashScriptStrategy + } + } +} diff --git a/src/main/kotlin/server/script/WindowsScript.kt b/src/main/kotlin/server/script/WindowsScriptStrategy.kt similarity index 50% rename from src/main/kotlin/server/script/WindowsScript.kt rename to src/main/kotlin/server/script/WindowsScriptStrategy.kt index 5f89b09..7439e3e 100644 --- a/src/main/kotlin/server/script/WindowsScript.kt +++ b/src/main/kotlin/server/script/WindowsScriptStrategy.kt @@ -1,23 +1,20 @@ package ru.endlesscode.bukkitgradle.server.script -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration - -public class WindowsScript(configuration: RunConfiguration, version: String) : RunningScript(configuration, version) { +public object WindowsScriptStrategy : RunningScriptStrategy() { override val ext: String = "bat" - override fun getScriptText(): String { + override fun getScriptText(jvmArgs: String, bukkitArgs: String): String { //language=bat return """ @echo off - ${buildRunCommand()} + ${buildJavaCommand(jvmArgs, bukkitArgs)} pause exit """.trimIndent() } - @Override - override fun getCommand(): List { + override fun getCommand(title: String): List { val title = "\"${title}\"" return listOf("cmd", "/c", "start", title, fileName) } From 84e26cf944df74cedd559492019f6754e06f7600 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 12:18:48 +0300 Subject: [PATCH 08/18] feat(scripts): Create GenerateRunningScript task --- .../bukkitgradle/server/task/RunServer.groovy | 9 +-- .../server/script/BashScriptStrategy.kt | 6 +- .../server/script/RunningScriptStrategy.kt | 28 +++------ .../server/script/WindowsScriptStrategy.kt | 9 ++- .../server/task/GenerateRunningScript.kt | 61 +++++++++++++++++++ 5 files changed, 76 insertions(+), 37 deletions(-) create mode 100644 src/main/kotlin/server/task/GenerateRunningScript.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy index d296cae..6960d70 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy @@ -12,20 +12,13 @@ class RunServer extends DefaultTask { @TaskAction void runServer() { - RunningScriptStrategy script = this.createStartScript() + RunningScriptStrategy script = RunningScriptStrategy.get() logger.lifecycle("Running script built!") logger.lifecycle("Starting Server...") this.runScript(script) logger.lifecycle("Server started successfully!") } - RunningScriptStrategy createStartScript() { - RunningScriptStrategy script = RunningScriptStrategy.get() - script.buildOn(this.core.serverDir) - - return script - } - void runScript(RunningScriptStrategy script) { new ProcessBuilder(script.command) .redirectErrorStream(true) diff --git a/src/main/kotlin/server/script/BashScriptStrategy.kt b/src/main/kotlin/server/script/BashScriptStrategy.kt index 7eddb21..3c195a2 100644 --- a/src/main/kotlin/server/script/BashScriptStrategy.kt +++ b/src/main/kotlin/server/script/BashScriptStrategy.kt @@ -1,16 +1,16 @@ package ru.endlesscode.bukkitgradle.server.script -public object BashScriptStrategy : RunningScriptStrategy() { +internal object BashScriptStrategy : RunningScriptStrategy() { override val ext: String = "sh" - override fun getScriptText(jvmArgs: String, bukkitArgs: String): String { + override fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String { //language=bash return """ #!/usr/bin/env bash cd "$( dirname "$0" )" - ${buildJavaCommand(jvmArgs, bukkitArgs)} + ${buildJavaCommand(jvmArgs, coreFileName, bukkitArgs)} """.trimIndent() } diff --git a/src/main/kotlin/server/script/RunningScriptStrategy.kt b/src/main/kotlin/server/script/RunningScriptStrategy.kt index b16f96d..620b458 100644 --- a/src/main/kotlin/server/script/RunningScriptStrategy.kt +++ b/src/main/kotlin/server/script/RunningScriptStrategy.kt @@ -1,8 +1,6 @@ package ru.endlesscode.bukkitgradle.server.script import org.gradle.internal.os.OperatingSystem -import ru.endlesscode.bukkitgradle.server.ServerConstants -import java.io.File public abstract class RunningScriptStrategy { @@ -10,21 +8,10 @@ public abstract class RunningScriptStrategy { protected abstract val ext: String /** Returns script file name. */ - protected val fileName: String get() = "start.$ext" - - /** Generates script file in the given [directory]. */ - public fun buildOn(directory: File) { - val scriptFile = File(directory, fileName) - if (!scriptFile.exists()) { - scriptFile.createNewFile() - } - - // FIXME - //scriptFile.writeText(this.getScriptText(, )) - } + public val fileName: String get() = "start.$ext" /** Returns script file content as multiline string. */ - protected abstract fun getScriptText(jvmArgs: String, bukkitArgs: String): String + public abstract fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String /** * Builds and returns server run command @@ -32,18 +19,17 @@ public abstract class RunningScriptStrategy { * * @return Server run command */ - protected fun buildJavaCommand(jvmArgs: String, bukkitArgs: String): String { - return "java $jvmArgs -jar ${ServerConstants.FILE_CORE} $bukkitArgs" + protected fun buildJavaCommand(jvmArgs: String, coreFileName: String, bukkitArgs: String): String { + return "java $jvmArgs -jar $coreFileName $bukkitArgs" } /** Returns command for ProcessBuilder. */ public abstract fun getCommand(title: String): List - public companion object { + internal companion object { - /** Returns start script for current system. */ - @JvmStatic - public fun get(): RunningScriptStrategy { + /** Returns script strategy for current system. */ + fun get(): RunningScriptStrategy { if (OperatingSystem.current().isWindows) { return WindowsScriptStrategy } diff --git a/src/main/kotlin/server/script/WindowsScriptStrategy.kt b/src/main/kotlin/server/script/WindowsScriptStrategy.kt index 7439e3e..c4dfe50 100644 --- a/src/main/kotlin/server/script/WindowsScriptStrategy.kt +++ b/src/main/kotlin/server/script/WindowsScriptStrategy.kt @@ -1,21 +1,20 @@ package ru.endlesscode.bukkitgradle.server.script -public object WindowsScriptStrategy : RunningScriptStrategy() { +internal object WindowsScriptStrategy : RunningScriptStrategy() { override val ext: String = "bat" - override fun getScriptText(jvmArgs: String, bukkitArgs: String): String { + override fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String { //language=bat return """ @echo off - ${buildJavaCommand(jvmArgs, bukkitArgs)} + ${buildJavaCommand(jvmArgs, coreFileName, bukkitArgs)} pause exit """.trimIndent() } override fun getCommand(title: String): List { - val title = "\"${title}\"" - return listOf("cmd", "/c", "start", title, fileName) + return listOf("cmd", "/c", "start", "\"${title}\"", fileName) } } diff --git a/src/main/kotlin/server/task/GenerateRunningScript.kt b/src/main/kotlin/server/task/GenerateRunningScript.kt new file mode 100644 index 0000000..d36e037 --- /dev/null +++ b/src/main/kotlin/server/task/GenerateRunningScript.kt @@ -0,0 +1,61 @@ +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.kotlin.dsl.property +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 val scriptStrategy: Property = + objects.property().convention(RunningScriptStrategy.get()) + + @Internal + public val scriptDir: DirectoryProperty = objects.directoryProperty() + + @OutputFile + public val scriptFile: Provider = scriptDir.zip(scriptStrategy) { scriptDir, strategy -> + scriptDir.file(strategy.fileName) + } + + init { + group = TASK_GROUP + description = "Generates script to run server without IDE." + } + + @TaskAction + internal fun generateScript() { + val scriptFile = scriptFile.get().asFile + if (!scriptFile.exists()) { + scriptFile.createNewFile() + } + + scriptFile.writeText( + scriptStrategy.get().getScriptText( + jvmArgs = jvmArgs.get(), + coreFileName = coreFileName.get(), + bukkitArgs = bukkitArgs.get() + ) + ) + } +} From b018b0c10a2729b1ae3eb8f3c5c9395227e0deb7 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 12:49:01 +0300 Subject: [PATCH 09/18] kotlin: Move RunServer to Kotlin --- .../bukkitgradle/DevServerPlugin.groovy | 17 ++++--- .../bukkitgradle/server/task/RunServer.groovy | 28 ------------ .../server/script/RunningScriptStrategy.kt | 14 +++--- .../server/task/GenerateRunningScript.kt | 16 ++++--- src/main/kotlin/server/task/RunServer.kt | 45 +++++++++++++++++++ 5 files changed, 74 insertions(+), 46 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy create mode 100644 src/main/kotlin/server/task/RunServer.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy index 57a6800..ef589a0 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy @@ -5,7 +5,9 @@ import org.gradle.api.Project import org.gradle.api.tasks.TaskProvider import ru.endlesscode.bukkitgradle.server.ServerConstants import ru.endlesscode.bukkitgradle.server.ServerCore +import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration import ru.endlesscode.bukkitgradle.server.task.CreateIdeaJarRunConfiguration +import ru.endlesscode.bukkitgradle.server.task.GenerateRunningScript import ru.endlesscode.bukkitgradle.server.task.PrepareServer import ru.endlesscode.bukkitgradle.server.task.RunServer @@ -14,11 +16,11 @@ class DevServerPlugin implements Plugin { @Override void apply(Project project) { ServerCore serverCore = new ServerCore(project) - project.tasks.register('runServer', RunServer) { - group = BukkitGradlePlugin.GROUP - description = 'Run dev server' - core = serverCore - dependsOn('prepareServer') + def configuration = project.bukkit.run as RunConfiguration + def generateRunningScript = project.tasks.register('generateRunningScript', GenerateRunningScript) { + jvmArgs.set(configuration.javaArgs) + bukkitArgs.set(configuration.bukkitArgs) + scriptDir.set(serverCore.serverDir) } def prepareServer = project.tasks.register('prepareServer', PrepareServer) { @@ -28,6 +30,11 @@ class DevServerPlugin implements Plugin { dependsOn('build', 'copyServerCore') } as TaskProvider + project.tasks.register('runServer', RunServer) { + scriptFile.set(generateRunningScript.map { it.scriptFile.get() }) + dependsOn(prepareServer) + } + project.tasks.register('buildIdeaRun', CreateIdeaJarRunConfiguration) { configurationName.set("$project.name: Run server") beforeRunTask.set('prepareServer') diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy deleted file mode 100644 index 6960d70..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/RunServer.groovy +++ /dev/null @@ -1,28 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.task - -import org.gradle.api.DefaultTask -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.TaskAction -import ru.endlesscode.bukkitgradle.server.ServerCore -import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy - -class RunServer extends DefaultTask { - @Input - ServerCore core - - @TaskAction - void runServer() { - RunningScriptStrategy script = RunningScriptStrategy.get() - logger.lifecycle("Running script built!") - logger.lifecycle("Starting Server...") - this.runScript(script) - logger.lifecycle("Server started successfully!") - } - - void runScript(RunningScriptStrategy script) { - new ProcessBuilder(script.command) - .redirectErrorStream(true) - .directory(core.serverDir) - .start() - } -} diff --git a/src/main/kotlin/server/script/RunningScriptStrategy.kt b/src/main/kotlin/server/script/RunningScriptStrategy.kt index 620b458..8980561 100644 --- a/src/main/kotlin/server/script/RunningScriptStrategy.kt +++ b/src/main/kotlin/server/script/RunningScriptStrategy.kt @@ -2,16 +2,16 @@ package ru.endlesscode.bukkitgradle.server.script import org.gradle.internal.os.OperatingSystem -public abstract class RunningScriptStrategy { +internal abstract class RunningScriptStrategy { /** Returns script file extension. */ protected abstract val ext: String /** Returns script file name. */ - public val fileName: String get() = "start.$ext" + val fileName: String get() = "start.$ext" /** Returns script file content as multiline string. */ - public abstract fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String + abstract fun getScriptText(jvmArgs: String, coreFileName: String, bukkitArgs: String): String /** * Builds and returns server run command @@ -24,13 +24,13 @@ public abstract class RunningScriptStrategy { } /** Returns command for ProcessBuilder. */ - public abstract fun getCommand(title: String): List + abstract fun getCommand(title: String): List - internal companion object { + companion object { /** Returns script strategy for current system. */ - fun get(): RunningScriptStrategy { - if (OperatingSystem.current().isWindows) { + fun get(operatingSystem: OperatingSystem): RunningScriptStrategy { + if (operatingSystem.isWindows) { return WindowsScriptStrategy } diff --git a/src/main/kotlin/server/task/GenerateRunningScript.kt b/src/main/kotlin/server/task/GenerateRunningScript.kt index d36e037..9f81a60 100644 --- a/src/main/kotlin/server/task/GenerateRunningScript.kt +++ b/src/main/kotlin/server/task/GenerateRunningScript.kt @@ -10,7 +10,9 @@ 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.server.ServerConstants import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy import javax.inject.Inject @@ -27,20 +29,22 @@ public open class GenerateRunningScript @Inject constructor(objects: ObjectFacto public val coreFileName: Property = objects.property() @Input - public val scriptStrategy: Property = - objects.property().convention(RunningScriptStrategy.get()) + public var osName: String = System.getProperty("os.name") @Internal public val scriptDir: DirectoryProperty = objects.directoryProperty() @OutputFile - public val scriptFile: Provider = scriptDir.zip(scriptStrategy) { scriptDir, strategy -> - scriptDir.file(strategy.fileName) - } + public val scriptFile: Provider + + private val scriptStrategy = RunningScriptStrategy.get(OperatingSystem.forName(osName)) init { group = TASK_GROUP description = "Generates script to run server without IDE." + + coreFileName.convention(ServerConstants.FILE_CORE) + scriptFile = scriptDir.map { it.file(scriptStrategy.fileName) } } @TaskAction @@ -51,7 +55,7 @@ public open class GenerateRunningScript @Inject constructor(objects: ObjectFacto } scriptFile.writeText( - scriptStrategy.get().getScriptText( + 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 new file mode 100644 index 0000000..d332563 --- /dev/null +++ b/src/main/kotlin/server/task/RunServer.kt @@ -0,0 +1,45 @@ +package ru.endlesscode.bukkitgradle.server.task + +import org.gradle.api.DefaultTask +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.Property +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 ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy +import javax.inject.Inject + +/** Run dev server from script. */ +public open class RunServer @Inject constructor(objects: ObjectFactory) : DefaultTask() { + + @Internal + public val title: Property = objects.property() + + @Internal + public val scriptFile: RegularFileProperty = objects.fileProperty() + + @Internal + public var osName: String = System.getProperty("os.name") + + private val scriptStrategy = RunningScriptStrategy.get(OperatingSystem.forName(osName)) + + init { + group = TASK_GROUP + description = "Run dev server from script." + + title.convention("Dev Server") + } + + @TaskAction + internal fun runServer() { + logger.lifecycle("Running script built!") + logger.lifecycle("Starting Server...") + ProcessBuilder(scriptStrategy.getCommand(title.get())) + .redirectErrorStream(true) + .directory(scriptFile.get().asFile.parentFile) + .start() + logger.lifecycle("Server started successfully!") + } +} From b59c7d24118f1d45659b67fbc98da2de7cc10725 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 13:17:06 +0300 Subject: [PATCH 10/18] test: Add tests for generateRunningScript task running --- .../task/GenerateRunningScriptSpec.groovy | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy new file mode 100644 index 0000000..c56e22a --- /dev/null +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy @@ -0,0 +1,36 @@ +package ru.endlesscode.bukkitgradle.server.task + +import org.gradle.testkit.runner.BuildResult +import org.gradle.testkit.runner.TaskOutcome +import ru.endlesscode.bukkitgradle.PluginSpecification + +class GenerateRunningScriptSpec extends PluginSpecification { + + private final static TASK_NAME = ':generateRunningScript' + + def "when run script generation - task should generate script"() { + when: "run script generation" + def result = generateRunningScript() + + then: "task should be successful" + result.task(TASK_NAME).outcome == TaskOutcome.SUCCESS + } + + def "when rerun script generation - and not changing any inputs - task should be up-to-date"() { + when: "run script generation" + def result = generateRunningScript() + + then: "task should be successful" + result.task(TASK_NAME).outcome == TaskOutcome.SUCCESS + + when: "run script generation again" + result = generateRunningScript() + + then: "task should be up-to-date" + result.task(TASK_NAME).outcome == TaskOutcome.UP_TO_DATE + } + + private BuildResult generateRunningScript() { + return runner.withArguments(TASK_NAME).build() + } +} From a76cab58b0d0d2b2ed075ff5b7651e10901ac47b Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 13:40:08 +0300 Subject: [PATCH 11/18] test: Add test for bat script generating --- .../bukkitgradle/DevServerPlugin.groovy | 2 +- .../server/script/RunningScriptStrategy.kt | 2 +- .../task/GenerateRunningScriptSpec.groovy | 36 +++++++++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy index ef589a0..d8b7e73 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy @@ -18,7 +18,7 @@ class DevServerPlugin implements Plugin { ServerCore serverCore = new ServerCore(project) def configuration = project.bukkit.run as RunConfiguration def generateRunningScript = project.tasks.register('generateRunningScript', GenerateRunningScript) { - jvmArgs.set(configuration.javaArgs) + jvmArgs.set(configuration.buildJvmArgs()) bukkitArgs.set(configuration.bukkitArgs) scriptDir.set(serverCore.serverDir) } diff --git a/src/main/kotlin/server/script/RunningScriptStrategy.kt b/src/main/kotlin/server/script/RunningScriptStrategy.kt index 8980561..fdebc00 100644 --- a/src/main/kotlin/server/script/RunningScriptStrategy.kt +++ b/src/main/kotlin/server/script/RunningScriptStrategy.kt @@ -20,7 +20,7 @@ internal abstract class RunningScriptStrategy { * @return Server run command */ protected fun buildJavaCommand(jvmArgs: String, coreFileName: String, bukkitArgs: String): String { - return "java $jvmArgs -jar $coreFileName $bukkitArgs" + return "java $jvmArgs -jar $coreFileName $bukkitArgs".trimEnd() } /** Returns command for ProcessBuilder. */ diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy index c56e22a..306f491 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy @@ -7,6 +7,19 @@ import ru.endlesscode.bukkitgradle.PluginSpecification class GenerateRunningScriptSpec extends PluginSpecification { private final static TASK_NAME = ':generateRunningScript' + private final static OS_NAME_ARG = '-Dos.name=' + + private File scriptDir + + def setup() { + buildFile << """ + bukkit { + version = '1.16.4' + run.debug = false + } + """.stripIndent() + scriptDir = dir("build/server/1.16.4/") + } def "when run script generation - task should generate script"() { when: "run script generation" @@ -30,7 +43,26 @@ class GenerateRunningScriptSpec extends PluginSpecification { result.task(TASK_NAME).outcome == TaskOutcome.UP_TO_DATE } - private BuildResult generateRunningScript() { - return runner.withArguments(TASK_NAME).build() + def "when run script generation - and os is windows - should generate bat file"() { + when: "run script generation" + def result = generateRunningScript('windows') + + then: "task should be successful" + result.task(TASK_NAME).outcome == TaskOutcome.SUCCESS + + and: "should generate bat script" + def scriptFile = new File(scriptDir, "start.bat") + //language=bat + scriptFile.text == """\ + @echo off + java -Dfile.encoding=UTF-8 -Xmx1G -jar core.jar + pause + exit""".stripIndent() + } + + private BuildResult generateRunningScript(String osName = null) { + def arguments = [TASK_NAME] + if (osName != null) arguments += "$OS_NAME_ARG$osName".toString() + return runner.withArguments(arguments).build() } } From 7163033c1c11efe1e50181fb2d91759977b3fb08 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 13:44:22 +0300 Subject: [PATCH 12/18] test: Add test for sh script generating --- .../task/GenerateRunningScriptSpec.groovy | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy index 306f491..288a071 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy @@ -43,8 +43,8 @@ class GenerateRunningScriptSpec extends PluginSpecification { result.task(TASK_NAME).outcome == TaskOutcome.UP_TO_DATE } - def "when run script generation - and os is windows - should generate bat file"() { - when: "run script generation" + def "when run script generation - and os is windows - should generate .bat file"() { + when: "run script generation with os windows" def result = generateRunningScript('windows') then: "task should be successful" @@ -57,7 +57,26 @@ class GenerateRunningScriptSpec extends PluginSpecification { @echo off java -Dfile.encoding=UTF-8 -Xmx1G -jar core.jar pause - exit""".stripIndent() + exit + """.stripIndent().trim() + } + + def "when run script generation - and os is linux - should generate .sh file"() { + when: "run script generation with os linux" + def result = generateRunningScript('linux') + + then: "task should be successful" + result.task(TASK_NAME).outcome == TaskOutcome.SUCCESS + + and: "should generate bat script" + def scriptFile = new File(scriptDir, "start.sh") + //language=sh + scriptFile.text == """\ + #!/usr/bin/env bash + + cd "\$( dirname "\$0" )" + java -Dfile.encoding=UTF-8 -Xmx1G -jar core.jar + """.stripIndent().trim() } private BuildResult generateRunningScript(String osName = null) { From c934aaca05e3db704111a4fb5cf11d2c8b3354ed Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 14:29:44 +0300 Subject: [PATCH 13/18] test: Add test runServer --- .../server/script/BashScriptStrategy.kt | 3 ++- src/main/kotlin/server/task/RunServer.kt | 4 ++-- .../task/GenerateRunningScriptSpec.groovy | 1 + .../server/task/RunServerSpec.groovy | 22 +++++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy diff --git a/src/main/kotlin/server/script/BashScriptStrategy.kt b/src/main/kotlin/server/script/BashScriptStrategy.kt index 3c195a2..34decdb 100644 --- a/src/main/kotlin/server/script/BashScriptStrategy.kt +++ b/src/main/kotlin/server/script/BashScriptStrategy.kt @@ -8,6 +8,7 @@ internal object BashScriptStrategy : RunningScriptStrategy() { //language=bash return """ #!/usr/bin/env bash + set -e cd "$( dirname "$0" )" ${buildJavaCommand(jvmArgs, coreFileName, bukkitArgs)} @@ -15,6 +16,6 @@ internal object BashScriptStrategy : RunningScriptStrategy() { } override fun getCommand(title: String): List { - return listOf("chmod +x $fileName", "&&", "./$fileName") + return listOf("bash", "-c", "chmod +x $fileName && ./$fileName") } } diff --git a/src/main/kotlin/server/task/RunServer.kt b/src/main/kotlin/server/task/RunServer.kt index d332563..98ebc39 100644 --- a/src/main/kotlin/server/task/RunServer.kt +++ b/src/main/kotlin/server/task/RunServer.kt @@ -4,6 +4,7 @@ import org.gradle.api.DefaultTask import org.gradle.api.file.RegularFileProperty 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 @@ -17,7 +18,7 @@ public open class RunServer @Inject constructor(objects: ObjectFactory) : Defaul @Internal public val title: Property = objects.property() - @Internal + @Input public val scriptFile: RegularFileProperty = objects.fileProperty() @Internal @@ -34,7 +35,6 @@ public open class RunServer @Inject constructor(objects: ObjectFactory) : Defaul @TaskAction internal fun runServer() { - logger.lifecycle("Running script built!") logger.lifecycle("Starting Server...") ProcessBuilder(scriptStrategy.getCommand(title.get())) .redirectErrorStream(true) diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy index 288a071..916fbe1 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/GenerateRunningScriptSpec.groovy @@ -73,6 +73,7 @@ class GenerateRunningScriptSpec extends PluginSpecification { //language=sh scriptFile.text == """\ #!/usr/bin/env bash + set -e cd "\$( dirname "\$0" )" java -Dfile.encoding=UTF-8 -Xmx1G -jar core.jar diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy new file mode 100644 index 0000000..0cb0c55 --- /dev/null +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy @@ -0,0 +1,22 @@ +package ru.endlesscode.bukkitgradle.server.task + +import org.gradle.testkit.runner.BuildResult +import org.gradle.testkit.runner.TaskOutcome +import ru.endlesscode.bukkitgradle.PluginSpecification + +class RunServerSpec extends PluginSpecification { + + private final static TASK_NAME = ':runServer' + + def "when run runServer - should also task dependencies"() { + when: "run server" + def result = runServer() + + then: "task should be successful" + result.task(TASK_NAME).outcome == TaskOutcome.SUCCESS + } + + private BuildResult runServer() { + return runner.withArguments(TASK_NAME, "--stacktrace").build() + } +} From 396bbf3c751bd2968b773fbeaa79ddc4679d7608 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 14:51:42 +0300 Subject: [PATCH 14/18] refactor: PLUGINS_GROUP -> TASKS_GROUP_BUKKIT --- src/main/kotlin/Constants.kt | 4 ++-- src/main/kotlin/meta/task/GenerateMeta.kt | 4 ++-- .../kotlin/server/task/CreateIdeaJarRunConfiguration.kt | 8 +++----- src/main/kotlin/server/task/GenerateRunningScript.kt | 4 ++-- src/main/kotlin/server/task/RunServer.kt | 3 ++- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/Constants.kt b/src/main/kotlin/Constants.kt index 5082f9b..c52240a 100644 --- a/src/main/kotlin/Constants.kt +++ b/src/main/kotlin/Constants.kt @@ -2,5 +2,5 @@ package ru.endlesscode.bukkitgradle -/** Plugins group name. */ -internal const val PLUGINS_GROUP: String = "Bukkit" +/** Bukkit tasks group name. */ +internal const val TASKS_GROUP_BUKKIT: String = "Bukkit" diff --git a/src/main/kotlin/meta/task/GenerateMeta.kt b/src/main/kotlin/meta/task/GenerateMeta.kt index e030dca..48ba825 100644 --- a/src/main/kotlin/meta/task/GenerateMeta.kt +++ b/src/main/kotlin/meta/task/GenerateMeta.kt @@ -5,7 +5,7 @@ import org.gradle.api.file.RegularFileProperty import org.gradle.api.tasks.Nested import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.TaskAction -import ru.endlesscode.bukkitgradle.PLUGINS_GROUP +import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT import ru.endlesscode.bukkitgradle.meta.MetaFile import java.io.File import javax.inject.Inject @@ -23,7 +23,7 @@ public open class GenerateMeta @Inject internal constructor( public val target: RegularFileProperty = project.objects.fileProperty() init { - group = PLUGINS_GROUP + group = TASKS_GROUP_BUKKIT description = "Generate plugin.yml file" val defaultTargetProvider = project.provider { File(temporaryDir, MetaFile.NAME) } diff --git a/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt b/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt index 7cb4ffe..6f07f64 100644 --- a/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt +++ b/src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt @@ -9,13 +9,11 @@ import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.property import org.gradle.kotlin.dsl.withGroovyBuilder -import ru.endlesscode.bukkitgradle.PLUGINS_GROUP +import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT import ru.endlesscode.bukkitgradle.server.util.Idea import java.io.File -/** - * Builds and writes to file run configuration in IDEA .xml format - */ +/** Builds and writes to file run configuration in IDEA .xml format. */ public open class CreateIdeaJarRunConfiguration : DefaultTask() { @Input @@ -37,7 +35,7 @@ public open class CreateIdeaJarRunConfiguration : DefaultTask() { public val configurationsDir: DirectoryProperty = project.objects.directoryProperty() init { - group = PLUGINS_GROUP + group = TASKS_GROUP_BUKKIT description = "Configure server run configuration for IDEA" vmParameters.convention("") diff --git a/src/main/kotlin/server/task/GenerateRunningScript.kt b/src/main/kotlin/server/task/GenerateRunningScript.kt index 9f81a60..cc4338e 100644 --- a/src/main/kotlin/server/task/GenerateRunningScript.kt +++ b/src/main/kotlin/server/task/GenerateRunningScript.kt @@ -12,7 +12,7 @@ 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.server.ServerConstants +import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy import javax.inject.Inject @@ -40,7 +40,7 @@ public open class GenerateRunningScript @Inject constructor(objects: ObjectFacto private val scriptStrategy = RunningScriptStrategy.get(OperatingSystem.forName(osName)) init { - group = TASK_GROUP + group = TASKS_GROUP_BUKKIT description = "Generates script to run server without IDE." coreFileName.convention(ServerConstants.FILE_CORE) diff --git a/src/main/kotlin/server/task/RunServer.kt b/src/main/kotlin/server/task/RunServer.kt index 98ebc39..38c02ae 100644 --- a/src/main/kotlin/server/task/RunServer.kt +++ b/src/main/kotlin/server/task/RunServer.kt @@ -9,6 +9,7 @@ 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 ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy import javax.inject.Inject @@ -27,7 +28,7 @@ public open class RunServer @Inject constructor(objects: ObjectFactory) : Defaul private val scriptStrategy = RunningScriptStrategy.get(OperatingSystem.forName(osName)) init { - group = TASK_GROUP + group = TASKS_GROUP_BUKKIT description = "Run dev server from script." title.convention("Dev Server") From e4c5a55329b5d7e505ba88d3f24780ab634502f5 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 15:43:14 +0300 Subject: [PATCH 15/18] test: Add test for RunServer task --- .../bukkitgradle/DevServerPlugin.groovy | 2 +- .../bukkitgradle/server/task/PrepareServer.groovy | 14 ++++++++++---- .../kotlin/server/script/BashScriptStrategy.kt | 2 +- .../kotlin/server/script/RunningScriptStrategy.kt | 2 +- .../kotlin/server/script/WindowsScriptStrategy.kt | 2 +- .../kotlin/server/task/GenerateRunningScript.kt | 1 + src/main/kotlin/server/task/RunServer.kt | 10 ++++++---- .../bukkitgradle/server/task/RunServerSpec.groovy | 7 ++++--- 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy index d8b7e73..108ae8a 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy @@ -31,7 +31,7 @@ class DevServerPlugin implements Plugin { } as TaskProvider project.tasks.register('runServer', RunServer) { - scriptFile.set(generateRunningScript.map { it.scriptFile.get() }) + scriptFile.set(generateRunningScript.map { it.scriptFile.get().asFile }) dependsOn(prepareServer) } diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/PrepareServer.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/PrepareServer.groovy index 7483349..b4ab005 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/PrepareServer.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/PrepareServer.groovy @@ -1,26 +1,32 @@ package ru.endlesscode.bukkitgradle.server.task +import groovy.transform.Internal import org.gradle.api.DefaultTask import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.RegularFile import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input +import org.gradle.api.provider.Provider import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.TaskAction import org.gradle.jvm.tasks.Jar import ru.endlesscode.bukkitgradle.server.ServerCore import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration class PrepareServer extends DefaultTask { - @Input + @Internal ServerCore core @InputDirectory final DirectoryProperty serverDir = project.objects.directoryProperty() - @Input + @Internal final Property jarTask = project.objects.property(Jar) - @Input + @InputFile + final Provider jarFile = jarTask.map {it.archiveFile.get() } + + @Internal RunConfiguration run PrepareServer() { diff --git a/src/main/kotlin/server/script/BashScriptStrategy.kt b/src/main/kotlin/server/script/BashScriptStrategy.kt index 34decdb..0852530 100644 --- a/src/main/kotlin/server/script/BashScriptStrategy.kt +++ b/src/main/kotlin/server/script/BashScriptStrategy.kt @@ -15,7 +15,7 @@ internal object BashScriptStrategy : RunningScriptStrategy() { """.trimIndent() } - override fun getCommand(title: String): List { + 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 index fdebc00..c4164be 100644 --- a/src/main/kotlin/server/script/RunningScriptStrategy.kt +++ b/src/main/kotlin/server/script/RunningScriptStrategy.kt @@ -24,7 +24,7 @@ internal abstract class RunningScriptStrategy { } /** Returns command for ProcessBuilder. */ - abstract fun getCommand(title: String): List + abstract fun getCommand(fileName: String, title: String): List companion object { diff --git a/src/main/kotlin/server/script/WindowsScriptStrategy.kt b/src/main/kotlin/server/script/WindowsScriptStrategy.kt index c4dfe50..b08e8dd 100644 --- a/src/main/kotlin/server/script/WindowsScriptStrategy.kt +++ b/src/main/kotlin/server/script/WindowsScriptStrategy.kt @@ -14,7 +14,7 @@ internal object WindowsScriptStrategy : RunningScriptStrategy() { """.trimIndent() } - override fun getCommand(title: String): List { + override fun getCommand(fileName: String, title: String): List { return listOf("cmd", "/c", "start", "\"${title}\"", fileName) } } diff --git a/src/main/kotlin/server/task/GenerateRunningScript.kt b/src/main/kotlin/server/task/GenerateRunningScript.kt index cc4338e..bea601b 100644 --- a/src/main/kotlin/server/task/GenerateRunningScript.kt +++ b/src/main/kotlin/server/task/GenerateRunningScript.kt @@ -13,6 +13,7 @@ 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 diff --git a/src/main/kotlin/server/task/RunServer.kt b/src/main/kotlin/server/task/RunServer.kt index 38c02ae..74d68b8 100644 --- a/src/main/kotlin/server/task/RunServer.kt +++ b/src/main/kotlin/server/task/RunServer.kt @@ -1,7 +1,6 @@ package ru.endlesscode.bukkitgradle.server.task import org.gradle.api.DefaultTask -import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import org.gradle.api.tasks.Input @@ -11,6 +10,7 @@ import org.gradle.internal.os.OperatingSystem import org.gradle.kotlin.dsl.property import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT import ru.endlesscode.bukkitgradle.server.script.RunningScriptStrategy +import java.io.File import javax.inject.Inject /** Run dev server from script. */ @@ -20,7 +20,7 @@ public open class RunServer @Inject constructor(objects: ObjectFactory) : Defaul public val title: Property = objects.property() @Input - public val scriptFile: RegularFileProperty = objects.fileProperty() + public val scriptFile: Property = objects.property() @Internal public var osName: String = System.getProperty("os.name") @@ -32,14 +32,16 @@ public open class RunServer @Inject constructor(objects: ObjectFactory) : Defaul description = "Run dev server from script." title.convention("Dev Server") + outputs.upToDateWhen { false } } @TaskAction internal fun runServer() { logger.lifecycle("Starting Server...") - ProcessBuilder(scriptStrategy.getCommand(title.get())) + val scriptFile = scriptFile.get() + ProcessBuilder(scriptStrategy.getCommand(scriptFile.name, title.get())) .redirectErrorStream(true) - .directory(scriptFile.get().asFile.parentFile) + .directory(scriptFile.parentFile) .start() logger.lifecycle("Server started successfully!") } diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy index 0cb0c55..2a04fdc 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy @@ -10,13 +10,14 @@ class RunServerSpec extends PluginSpecification { def "when run runServer - should also task dependencies"() { when: "run server" - def result = runServer() + def result = runServer('-x', 'prepareServer') then: "task should be successful" + result.task(':generateRunningScript').outcome == TaskOutcome.SUCCESS result.task(TASK_NAME).outcome == TaskOutcome.SUCCESS } - private BuildResult runServer() { - return runner.withArguments(TASK_NAME, "--stacktrace").build() + private BuildResult runServer(String... args) { + return runner.withArguments([TASK_NAME] + args.toList()).build() } } From b0548f52b87578132db830065e4bfcee1fbe2089 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 15:51:06 +0300 Subject: [PATCH 16/18] refactor: DevServerPlugin -> Legacy --- .../ru/endlesscode/bukkitgradle/BukkitGradlePlugin.groovy | 3 ++- .../legacy/LegacyDevServerPlugin.groovy} | 8 ++++---- .../bukkitgradle/server/{ => legacy}/ServerCore.groovy | 8 +++++--- .../server/{ => legacy}/ServerProperties.groovy | 2 +- .../server/{ => legacy}/task/PrepareServer.groovy | 4 ++-- .../bukkitgradle/server/{ => legacy}/util/MavenApi.groovy | 2 +- 6 files changed, 15 insertions(+), 12 deletions(-) rename src/main/groovy/ru/endlesscode/bukkitgradle/{DevServerPlugin.groovy => server/legacy/LegacyDevServerPlugin.groovy} (88%) rename src/main/groovy/ru/endlesscode/bukkitgradle/server/{ => legacy}/ServerCore.groovy (97%) rename src/main/groovy/ru/endlesscode/bukkitgradle/server/{ => legacy}/ServerProperties.groovy (98%) rename src/main/groovy/ru/endlesscode/bukkitgradle/server/{ => legacy}/task/PrepareServer.groovy (95%) rename src/main/groovy/ru/endlesscode/bukkitgradle/server/{ => legacy}/util/MavenApi.groovy (94%) diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/BukkitGradlePlugin.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/BukkitGradlePlugin.groovy index d3a4fd1..345c2f3 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/BukkitGradlePlugin.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/BukkitGradlePlugin.groovy @@ -9,6 +9,7 @@ import ru.endlesscode.bukkitgradle.meta.PluginMetaPlugin import ru.endlesscode.bukkitgradle.meta.extension.PluginMeta import ru.endlesscode.bukkitgradle.meta.util.StringUtils import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration +import ru.endlesscode.bukkitgradle.server.legacy.LegacyDevServerPlugin class BukkitGradlePlugin implements Plugin { final static String GROUP = 'Bukkit' @@ -45,7 +46,7 @@ class BukkitGradlePlugin implements Plugin { plugins.with { apply('java') apply(PluginMetaPlugin) - apply(DevServerPlugin) + apply(LegacyDevServerPlugin) } convention.getPlugin(JavaPluginConvention).with { diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/LegacyDevServerPlugin.groovy similarity index 88% rename from src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy rename to src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/LegacyDevServerPlugin.groovy index 108ae8a..5431226 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/DevServerPlugin.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/LegacyDevServerPlugin.groovy @@ -1,17 +1,17 @@ -package ru.endlesscode.bukkitgradle +package ru.endlesscode.bukkitgradle.server.legacy import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.TaskProvider +import ru.endlesscode.bukkitgradle.BukkitGradlePlugin import ru.endlesscode.bukkitgradle.server.ServerConstants -import ru.endlesscode.bukkitgradle.server.ServerCore import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration +import ru.endlesscode.bukkitgradle.server.legacy.task.PrepareServer import ru.endlesscode.bukkitgradle.server.task.CreateIdeaJarRunConfiguration import ru.endlesscode.bukkitgradle.server.task.GenerateRunningScript -import ru.endlesscode.bukkitgradle.server.task.PrepareServer import ru.endlesscode.bukkitgradle.server.task.RunServer -class DevServerPlugin implements Plugin { +class LegacyDevServerPlugin implements Plugin { @Override void apply(Project project) { diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/ServerCore.groovy similarity index 97% rename from src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy rename to src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/ServerCore.groovy index df3c2a1..5804fb1 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/ServerCore.groovy @@ -1,4 +1,4 @@ -package ru.endlesscode.bukkitgradle.server +package ru.endlesscode.bukkitgradle.server.legacy import de.undercouch.gradle.tasks.download.Download import de.undercouch.gradle.tasks.download.DownloadExtension @@ -6,10 +6,12 @@ import groovy.json.JsonSlurper import org.gradle.api.Project import org.gradle.api.tasks.Copy import org.gradle.api.tasks.JavaExec -import ru.endlesscode.bukkitgradle.BukkitGroovy import ru.endlesscode.bukkitgradle.BukkitGradlePlugin -import ru.endlesscode.bukkitgradle.server.util.MavenApi +import ru.endlesscode.bukkitgradle.BukkitGroovy +import ru.endlesscode.bukkitgradle.server.PaperConstants +import ru.endlesscode.bukkitgradle.server.ServerConstants import ru.endlesscode.bukkitgradle.server.extension.CoreType +import ru.endlesscode.bukkitgradle.server.legacy.util.MavenApi import javax.annotation.Nullable diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerProperties.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/ServerProperties.groovy similarity index 98% rename from src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerProperties.groovy rename to src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/ServerProperties.groovy index e822ad4..e9c641b 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerProperties.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/ServerProperties.groovy @@ -1,4 +1,4 @@ -package ru.endlesscode.bukkitgradle.server +package ru.endlesscode.bukkitgradle.server.legacy import org.slf4j.Logger import org.slf4j.LoggerFactory diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/PrepareServer.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/task/PrepareServer.groovy similarity index 95% rename from src/main/groovy/ru/endlesscode/bukkitgradle/server/task/PrepareServer.groovy rename to src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/task/PrepareServer.groovy index b4ab005..8ce145d 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/task/PrepareServer.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/task/PrepareServer.groovy @@ -1,4 +1,4 @@ -package ru.endlesscode.bukkitgradle.server.task +package ru.endlesscode.bukkitgradle.server.legacy.task import groovy.transform.Internal import org.gradle.api.DefaultTask @@ -10,8 +10,8 @@ import org.gradle.api.tasks.InputDirectory import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.TaskAction import org.gradle.jvm.tasks.Jar -import ru.endlesscode.bukkitgradle.server.ServerCore import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration +import ru.endlesscode.bukkitgradle.server.legacy.ServerCore class PrepareServer extends DefaultTask { @Internal diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/util/MavenApi.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/util/MavenApi.groovy similarity index 94% rename from src/main/groovy/ru/endlesscode/bukkitgradle/server/util/MavenApi.groovy rename to src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/util/MavenApi.groovy index d98544d..af2cd42 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/util/MavenApi.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/util/MavenApi.groovy @@ -1,4 +1,4 @@ -package ru.endlesscode.bukkitgradle.server.util +package ru.endlesscode.bukkitgradle.server.legacy.util import org.gradle.api.Project From 00caf24d4efe31ebf3c508a86d1ea9fffc2e6095 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 17:25:15 +0300 Subject: [PATCH 17/18] test: Fix legacy tests --- .../bukkitgradle/BukkitTest.groovy | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/test/groovy/ru/endlesscode/bukkitgradle/BukkitTest.groovy b/src/test/groovy/ru/endlesscode/bukkitgradle/BukkitTest.groovy index ac39262..443ba1f 100644 --- a/src/test/groovy/ru/endlesscode/bukkitgradle/BukkitTest.groovy +++ b/src/test/groovy/ru/endlesscode/bukkitgradle/BukkitTest.groovy @@ -22,12 +22,12 @@ class BukkitTest extends PluginTestBase { void testDefaultMetaMustInheritMeta() throws Exception { project.with { PluginMeta meta = bukkit.meta - assert name == meta.name - assert description == meta.description - assert version == meta.version - assert ext.url == meta.url - assert "com.example.plugin.TestProject" == meta.main - assert meta.authors == null + assert name == meta.name.get() + assert description == meta.description.get() + assert version == meta.version.get() + assert ext.url == meta.url.get() + assert "com.example.plugin.TestProject" == meta.main.get() + assert [] == meta.authors.get() } } @@ -36,11 +36,11 @@ class BukkitTest extends PluginTestBase { this.initBukkitMeta() PluginMeta meta = this.project.bukkit.meta - assert "TestPlugin" == meta.name - assert "Test plugin description" == meta.description - assert "0.1" == meta.version - assert "com.example.plugin.Plugin" == meta.main - assert "http://www.example.com/" == meta.url - assert "[OsipXD, Contributors]" == meta.authors + assert "TestPlugin" == meta.name.get() + assert "Test plugin description" == meta.description.get() + assert "0.1" == meta.version.get() + assert "com.example.plugin.Plugin" == meta.main.get() + assert "http://www.example.com/" == meta.url.get() + assert ['OsipXD', 'Contributors'] == meta.authors.get() } } From 50f82ae69d0e2f595b19ba72a2c7575c3e8398ed Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 4 Jan 2021 17:27:11 +0300 Subject: [PATCH 18/18] kotlin: Move PrepareServer to Kotlin --- .../legacy/LegacyDevServerPlugin.groovy | 35 +++++--- .../server/legacy/task/PrepareServer.groovy | 81 ------------------- src/main/kotlin/Bukkit.kt | 2 + src/main/kotlin/server/task/PrepareServer.kt | 70 ++++++++++++++++ 4 files changed, 97 insertions(+), 91 deletions(-) delete mode 100644 src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/task/PrepareServer.groovy create mode 100644 src/main/kotlin/server/task/PrepareServer.kt diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/LegacyDevServerPlugin.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/LegacyDevServerPlugin.groovy index 5431226..5cbd0cb 100644 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/LegacyDevServerPlugin.groovy +++ b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/LegacyDevServerPlugin.groovy @@ -2,13 +2,15 @@ package ru.endlesscode.bukkitgradle.server.legacy import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.tasks.Copy import org.gradle.api.tasks.TaskProvider -import ru.endlesscode.bukkitgradle.BukkitGradlePlugin +import org.gradle.jvm.tasks.Jar +import ru.endlesscode.bukkitgradle.meta.extension.PluginMeta import ru.endlesscode.bukkitgradle.server.ServerConstants import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration -import ru.endlesscode.bukkitgradle.server.legacy.task.PrepareServer import ru.endlesscode.bukkitgradle.server.task.CreateIdeaJarRunConfiguration import ru.endlesscode.bukkitgradle.server.task.GenerateRunningScript +import ru.endlesscode.bukkitgradle.server.task.PrepareServer import ru.endlesscode.bukkitgradle.server.task.RunServer class LegacyDevServerPlugin implements Plugin { @@ -23,13 +25,7 @@ class LegacyDevServerPlugin implements Plugin { scriptDir.set(serverCore.serverDir) } - def prepareServer = project.tasks.register('prepareServer', PrepareServer) { - group = BukkitGradlePlugin.GROUP - description = 'Prepare server ro run. Configure server and copy compiled plugin to plugins dir' - core = serverCore - dependsOn('build', 'copyServerCore') - } as TaskProvider - + def prepareServer = configurePrepareServerTask(project, serverCore) project.tasks.register('runServer', RunServer) { scriptFile.set(generateRunningScript.map { it.scriptFile.get().asFile }) dependsOn(prepareServer) @@ -39,7 +35,26 @@ class LegacyDevServerPlugin implements Plugin { configurationName.set("$project.name: Run server") beforeRunTask.set('prepareServer') configurationsDir.set(project.rootProject.layout.projectDirectory.dir('.idea/runConfigurations')) - jarPath.set(prepareServer.map { it.serverDir.file(ServerConstants.FILE_CORE).get().asFile }) + jarPath.set(new File(serverCore.serverDir, ServerConstants.FILE_CORE)) + } + } + + private static TaskProvider configurePrepareServerTask(Project project, ServerCore serverCore) { + def jarTaskName = project.plugins.hasPlugin("com.github.johnrengelman.shadow") ? "shadowJar" : "jar" + def jarTask = project.tasks.named(jarTaskName, Jar) as TaskProvider + def meta = project.bukkit.meta as PluginMeta + def copyPlugins = project.tasks.register("copyPlugins", Copy) { + from(jarTask) + into(project.mkdir(new File(serverCore.serverDir, "plugins"))) + rename { "${meta.name.get()}.jar" } + } + + def run = project.bukkit.run as RunConfiguration + return project.tasks.register('prepareServer', PrepareServer) { + serverDir.set(serverCore.serverDir) + eula = run.eula + onlineMode = run.onlineMode + dependsOn('copyServerCore', copyPlugins) } } } diff --git a/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/task/PrepareServer.groovy b/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/task/PrepareServer.groovy deleted file mode 100644 index 8ce145d..0000000 --- a/src/main/groovy/ru/endlesscode/bukkitgradle/server/legacy/task/PrepareServer.groovy +++ /dev/null @@ -1,81 +0,0 @@ -package ru.endlesscode.bukkitgradle.server.legacy.task - -import groovy.transform.Internal -import org.gradle.api.DefaultTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFile -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.TaskAction -import org.gradle.jvm.tasks.Jar -import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration -import ru.endlesscode.bukkitgradle.server.legacy.ServerCore - -class PrepareServer extends DefaultTask { - @Internal - ServerCore core - - @InputDirectory - final DirectoryProperty serverDir = project.objects.directoryProperty() - - @Internal - final Property jarTask = project.objects.property(Jar) - - @InputFile - final Provider jarFile = jarTask.map {it.archiveFile.get() } - - @Internal - RunConfiguration run - - PrepareServer() { - def jarTaskName = project.plugins.hasPlugin('com.github.johnrengelman.shadow') ? 'shadowJar' : 'jar' - jarTask.convention(project.tasks.named(jarTaskName, Jar)) - } - - void setCore(ServerCore core) { - this.core = core - this.serverDir.fileProvider(project.provider { project.mkdir(core.serverDir) }) - this.run = project.bukkit.run - } - - @TaskAction - void prepareServer() { - resolveEula() - resolveOnlineMode() - copyPluginsToServerDir() - } - - void resolveEula() { - def eulaFile = serverDir.file("eula.txt").get().asFile - if (!eulaFile.exists()) { - eulaFile.createNewFile() - } - - Properties properties = new Properties() - properties.load(eulaFile.newReader("UTF-8")) - properties.setProperty("eula", "${this.run.eula}") - properties.store(eulaFile.newWriter("UTF-8"), "By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).") - } - - void resolveOnlineMode() { - def propsFile = serverDir.file("server.properties").get().asFile - if (!propsFile.exists()) { - propsFile.createNewFile() - } - - Properties properties = new Properties() - properties.load(propsFile.newReader("UTF-8")) - properties.setProperty("online-mode", "${this.run.onlineMode}") - properties.store(propsFile.newWriter("UTF-8"), "Minecraft server properties") - } - - void copyPluginsToServerDir() { - project.copy { - from(jarTask) - into(project.mkdir(serverDir.dir('plugins'))) - rename { "${project.bukkit.meta.name}.jar" } - } - } -} diff --git a/src/main/kotlin/Bukkit.kt b/src/main/kotlin/Bukkit.kt index ca90fb3..28079b5 100644 --- a/src/main/kotlin/Bukkit.kt +++ b/src/main/kotlin/Bukkit.kt @@ -3,9 +3,11 @@ package ru.endlesscode.bukkitgradle import org.gradle.api.Project import org.gradle.kotlin.dsl.getByType import ru.endlesscode.bukkitgradle.meta.extension.PluginMeta +import ru.endlesscode.bukkitgradle.server.extension.RunConfiguration public interface Bukkit { public val meta: PluginMeta + public val run: RunConfiguration } internal val Project.bukkit: Bukkit get() = extensions.getByType() diff --git a/src/main/kotlin/server/task/PrepareServer.kt b/src/main/kotlin/server/task/PrepareServer.kt new file mode 100644 index 0000000..ee90dfc --- /dev/null +++ b/src/main/kotlin/server/task/PrepareServer.kt @@ -0,0 +1,70 @@ +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.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 ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT +import java.util.* +import javax.inject.Inject + +internal open class PrepareServer @Inject constructor(objects: ObjectFactory) : DefaultTask() { + + @Internal + val serverDir: DirectoryProperty = objects.directoryProperty() + + @Input + var eula: Boolean = false + + @Input + var onlineMode: Boolean = true + + @OutputFile + val eulaFile: Provider = serverDir.map { it.file("eula.txt") } + + @OutputFile + val propertiesFile: Provider = serverDir.map { it.file("server.properties") } + + init { + group = TASKS_GROUP_BUKKIT + description = "Prepare server to run. Configure eula and online-mode." + } + + @TaskAction + fun prepareServer() { + resolveEula() + resolveOnlineMode() + } + + private fun resolveEula() { + val eulaFile = eulaFile.get().asFile + if (!eulaFile.exists()) { + eulaFile.createNewFile() + } + + val properties = Properties() + properties.load(eulaFile.reader()) + properties.setProperty("eula", "$eula") + properties.store( + eulaFile.writer(), + "By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula)." + ) + } + + private fun resolveOnlineMode() { + val propsFile = propertiesFile.get().asFile + if (!propsFile.exists()) { + propsFile.createNewFile() + } + + val properties = Properties() + properties.load(propsFile.reader()) + properties.setProperty("online-mode", "$onlineMode") + properties.store(propsFile.writer(), "Minecraft server properties") + } +}