3
0
Fork 1
KCauldronX/buildSrc/src/main/groovy/kcauldron/InstallBundle.groovy

92 lines
2.7 KiB
Groovy

package kcauldron
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.tasks.*
class InstallBundle extends DefaultTask {
@InputFile
def File serverJar
@InputFiles
def ConfigurableFileCollection bootstrapClasspath
@Input
def String bootstrapMain
InstallBundle() {
bootstrapClasspath = project.files()
}
def bootstrapClasspath(Object... args) {
bootstrapClasspath.from args
}
@OutputDirectory
def File getInstallLocation() {
new File(project.buildDir, 'bundle')
}
@TaskAction
def install() {
installLocation.deleteDir()
installLocation.mkdirs()
new File(installLocation, "README.txt").withWriter {
def String jarPath = 'libraries' << File.separator << (project.group as String).replace('.', File.separator) << File.separator << project.name << File.separator << project.version << File.separator << project.name << '-' << project.version << '.jar'
it << '''KCauldron installation guide
# Understanding this bundle
You're reading this guide because you're using deprecated installation method
If you want use easier & safer method please read about KBootstrap at https://prok.pw/KBootstrap
# Installation and usage
1. Unpack this zip into server directory
2. Use following line to start the server:
java -jar '''
it << jarPath
it << '''
... or
java -jar KCauldron.jar
3. That's end, enjoy
# Why I should use KBootstrap?
1. Easiest server installation
2. Built-in libraries management
3. Update & run server in one line
4. Ability to not read this boring guide
5. What else?
If you are not yet convinced and want to use bundles instead KBootstrap... Meh, this is your choice.
'''
}
def cp = bootstrapClasspath
for (int i = 0; i < 3; i++) {
def result = project.javaexec { it ->
workingDir installLocation
classpath cp
main bootstrapMain
args '--serverDir', installLocation.canonicalPath,
'--installServer', serverJar.canonicalFile,
'--binDir', 'libraries'
}
if (result.exitValue == 0) return
}
throw new GradleException("Failed to install bundle into ${installLocation}")
}
private static final class NopOutputStream extends OutputStream {
@Override
void write(byte[] b, int off, int len) throws IOException {
}
@Override
void write(byte[] b) throws IOException {
}
@Override
void write(int b) throws IOException {
}
}
}