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

65 lines
1.6 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()
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 {
}
}
}