Skip to content

Commit 46b25ee

Browse files
authored
Merge pull request #1 from EndlessCodeGroup/feature/betterServerRunning
Better Server Running
2 parents 81b1dee + 8456c5c commit 46b25ee

File tree

14 files changed

+364
-49
lines changed

14 files changed

+364
-49
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ apply from: 'jacoco.gradle'
1010

1111
group "ru.endlesscode"
1212
description "Bukkit Gradle integration plugins"
13-
version "0.4.0"
13+
version "0.5.3"
1414

1515
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
1616

src/main/groovy/ru/endlesscode/bukkitgradle/extension/RunConfiguration.groovy

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,58 @@ package ru.endlesscode.bukkitgradle.extension
22

33
import org.gradle.api.Project
44

5+
import java.nio.file.Path
6+
57
class RunConfiguration {
8+
private static final String DEBUG_ARGS = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
9+
610
private Project project
711

12+
boolean eula
13+
boolean onlineMode
14+
boolean debug
15+
String encoding
16+
String dir
17+
String javaArgs
18+
String bukkitArgs
19+
820
RunConfiguration(Project project) {
921
this.project = project
22+
23+
this.eula = false
24+
this.onlineMode = false
25+
this.debug = true
26+
this.encoding = "UTF-8"
27+
this.dir = "server"
28+
29+
this.javaArgs = "-Xmx1G"
30+
this.bukkitArgs = ""
31+
}
32+
33+
/**
34+
* Returns arguments for java
35+
*
36+
* @return Java arguments
37+
*/
38+
String getJavaArgs() {
39+
return "${this.debug ? "$DEBUG_ARGS " : ""}-Dfile.encoding=$encoding ${this.javaArgs}"
40+
}
41+
42+
/**
43+
* Returns arguments for bukkit
44+
*
45+
* @return Bukkit arguments
46+
*/
47+
String getBukkitArgs() {
48+
return "-o $onlineMode${bukkitArgs ? " $bukkitArgs" : ""}"
49+
}
50+
51+
/**
52+
* Returns servers dir
53+
*
54+
* @return The directory
55+
*/
56+
Path getDir() {
57+
project.projectDir.toPath().resolve(this.dir)
1058
}
1159
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package ru.endlesscode.bukkitgradle.server
2+
3+
import org.gradle.api.DefaultTask
4+
import org.gradle.api.tasks.Input
5+
import org.gradle.api.tasks.TaskAction
6+
7+
import java.nio.file.Files
8+
import java.nio.file.Path
9+
import java.nio.file.StandardCopyOption
10+
11+
class PrepareServer extends DefaultTask {
12+
@Input
13+
ServerCore core
14+
15+
private Path serverDir
16+
17+
@TaskAction
18+
void prepareServer() {
19+
this.serverDir = core.serverDir
20+
21+
resolveEula()
22+
copyPluginToServerDir()
23+
}
24+
25+
void resolveEula() {
26+
Path eulaFile = serverDir.resolve("eula.txt")
27+
28+
boolean eula = project.bukkit.run.eula
29+
eulaFile.text = "eula=$eula"
30+
}
31+
32+
void copyPluginToServerDir() {
33+
String pluginName = "${project.bukkit.meta.name}.jar"
34+
Path jar = project.jar.archivePath.toPath()
35+
Path pluginsDir = serverDir.resolve("plugins").toRealPath()
36+
Files.createDirectories(pluginsDir)
37+
38+
Files.copy(jar, pluginsDir.resolve(pluginName), StandardCopyOption.REPLACE_EXISTING)
39+
}
40+
}

src/main/groovy/ru/endlesscode/bukkitgradle/server/RunServer.groovy

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,34 @@ package ru.endlesscode.bukkitgradle.server
33
import org.gradle.api.DefaultTask
44
import org.gradle.api.tasks.Input
55
import org.gradle.api.tasks.TaskAction
6+
import ru.endlesscode.bukkitgradle.extension.RunConfiguration
7+
import ru.endlesscode.bukkitgradle.server.script.SystemScript
68

79
class RunServer extends DefaultTask {
810
@Input
911
ServerCore core
1012

1113
@TaskAction
12-
void launchServer() {
13-
final ProcessBuilder processBuilder = new ProcessBuilder("java", "-Xmx1G", "-jar", "core.jar")
14-
processBuilder.redirectErrorStream(true)
15-
processBuilder.directory(new File(project.buildDir, core.getShortVersion()))
16-
14+
void runServer() {
15+
SystemScript script = this.createStartScript()
16+
logger.lifecycle("Running script built!")
1717
logger.lifecycle("Starting Server...")
18-
final Process serverProcess = processBuilder.start()
19-
StreamSpy.spy(serverProcess.in, logger)
20-
StreamSpy.spy(System.in, serverProcess.out)
18+
this.runScript(script)
19+
logger.lifecycle("Server started successfully!")
20+
}
21+
22+
SystemScript createStartScript() {
23+
RunConfiguration configuration = project.bukkit.run
24+
SystemScript script = SystemScript.getScript(configuration, core.simpleVersion)
25+
script.buildOn(this.core.serverDir)
26+
27+
return script
28+
}
2129

22-
serverProcess.waitFor()
23-
logger.lifecycle("Server stopped")
30+
void runScript(SystemScript script) {
31+
new ProcessBuilder(script.command)
32+
.redirectErrorStream(true)
33+
.directory(core.serverDir.toFile())
34+
.start()
2435
}
2536
}

src/main/groovy/ru/endlesscode/bukkitgradle/server/ServerCore.groovy

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import java.nio.file.Path
99
import java.nio.file.StandardCopyOption
1010

1111
class ServerCore {
12+
public static final String CORE_NAME = "core.jar"
13+
1214
private static final String MAVEN_METADATA = "maven-metadata.xml"
13-
private static final String CORE_NAME = "core.jar"
1415

1516
private final Project project
1617

@@ -27,7 +28,7 @@ class ServerCore {
2728
* Initializes downloading dir
2829
*/
2930
void initDownloadDir() {
30-
this.downloadDir = project.buildDir.toPath().resolve("server")
31+
this.downloadDir = project.buildDir.toPath().resolve("serverCore")
3132
Files.createDirectories(downloadDir)
3233
}
3334

@@ -77,12 +78,11 @@ class ServerCore {
7778
*/
7879
void registerCoreCopyTask() {
7980
project.with {
80-
task("prepareServerCore", dependsOn: "downloadServerCore").doLast {
81+
task("copyServerCore", dependsOn: "downloadServerCore").doLast {
8182
Path source = downloadDir.resolve(getCoreName())
82-
Path destinationDir = buildDir.toPath().resolve(getShortVersion())
83-
Files.createDirectories(destinationDir)
83+
Path destination = getServerDir().resolve(CORE_NAME)
8484

85-
Files.copy(source, destinationDir.resolve(CORE_NAME), StandardCopyOption.REPLACE_EXISTING)
85+
Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING)
8686
}
8787
}
8888
}
@@ -99,9 +99,9 @@ class ServerCore {
9999
/**
100100
* Returns version without revision suffix
101101
*
102-
* @return Short version
102+
* @return Simple version
103103
*/
104-
String getShortVersion() {
104+
String getSimpleVersion() {
105105
getRealVersion().replace(Bukkit.REVISION_SUFFIX, "")
106106
}
107107

@@ -120,4 +120,16 @@ class ServerCore {
120120
def metadata = new XmlSlurper().parse(metaFile.toFile())
121121
metadata.versioning.latest.toString()
122122
}
123+
124+
/**
125+
* Returns server directory
126+
*
127+
* @return Server directory
128+
*/
129+
Path getServerDir() {
130+
Path serverDir = this.project.bukkit.run.dir.resolve(getSimpleVersion())
131+
Files.createDirectories(serverDir)
132+
133+
return serverDir
134+
}
123135
}

src/main/groovy/ru/endlesscode/bukkitgradle/server/StreamSpy.groovy

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/groovy/ru/endlesscode/bukkitgradle/server/TestServerPlugin.groovy

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ class TestServerPlugin implements Plugin<Project> {
77

88
@Override
99
void apply(Project project) {
10-
project.task("runServer", type: RunServer, dependsOn: "prepareServerCore") {
11-
core new ServerCore(project)
10+
ServerCore serverCore = new ServerCore(project)
11+
project.task("runServer", type: RunServer, dependsOn: "prepareServer") {
12+
core serverCore
13+
}
14+
15+
project.task("prepareServer", type: PrepareServer, dependsOn: ["build", "copyServerCore"]) {
16+
core serverCore
1217
}
1318
}
1419
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package ru.endlesscode.bukkitgradle.server.script
2+
3+
import ru.endlesscode.bukkitgradle.extension.RunConfiguration
4+
5+
class LinuxScript extends SystemScript {
6+
LinuxScript(RunConfiguration configuration, String version) {
7+
super(configuration, version)
8+
}
9+
10+
@Override
11+
protected String getExt() {
12+
return "sh"
13+
}
14+
15+
@Override
16+
protected String getScriptText() {
17+
"""#!/bin/sh
18+
19+
${buildRunCommand()}"""
20+
}
21+
22+
@Override
23+
List<String> getCommand() {
24+
String scriptName = getFileName()
25+
return ["chmod +x $scriptName", "&&", "./$scriptName", "&"]
26+
}
27+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package ru.endlesscode.bukkitgradle.server.script
2+
3+
import ru.endlesscode.bukkitgradle.extension.RunConfiguration
4+
5+
class MacScript extends SystemScript {
6+
MacScript(RunConfiguration configuration, String version) {
7+
super(configuration, version)
8+
}
9+
10+
@Override
11+
protected String getExt() {
12+
return "command"
13+
}
14+
15+
@Override
16+
protected String getScriptText() {
17+
"""#!/bin/sh
18+
19+
cd "\$( dirname "\$0" )"
20+
${buildRunCommand()}"""
21+
}
22+
23+
@Override
24+
List<String> getCommand() {
25+
String scriptName = getFileName()
26+
return ["chmod +x $scriptName", "&&", "open", scriptName]
27+
}
28+
}

0 commit comments

Comments
 (0)