blob: 012d648ba62d84b7d756185974e199cbc3627831 [file] [log] [blame] [raw]
buildscript {
dependencies {
classpath 'org.jdom:jdom2:2.0.6'
classpath 'org.ow2.asm:asm:5.1'
classpath 'org.ow2.asm:asm-commons:5.1'
classpath 'commons-io:commons-io:2.5'
classpath 'org.apache.ant:ant:1.9.7'
classpath 'org.codehaus.plexus:plexus-utils:3.0.24'
classpath 'org.vafer:jdependency:1.1'
classpath files('gradle/plugins/shadowPlugin.jar')
}
repositories {
mavenCentral()
}
}
plugins {
id 'java'
}
apply from: 'helper.gradle'
apply plugin: com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
tasks.withType(AbstractCompile) {
classpath += configurations.shadow
}
group 'protocolsupport'
version '4.29-dev'
sourceCompatibility = JavaVersion.VERSION_1_8
File librariesRuntimeDirectory = new File("libraries_runtime")
File librariesShadeDirectory = new File("libraries_shade")
File generatedResourcesDirectory = new File("gen")
File annotationProcessorsDirectory = new File("processors")
File targetJarDirectory = new File("target")
String resourcesDirectoryName = "resources";
task setupFolders(type: DefaultTask) {doLast{
librariesRuntimeDirectory.mkdirs()
librariesShadeDirectory.mkdirs()
targetJarDirectory.mkdirs()
generatedResourcesDirectory.deleteDir()
generatedResourcesDirectory.mkdirs()
}}
task updateSpigot(type: BuildLibraryTask) {
targetDirectory = librariesRuntimeDirectory
targetLibraryName = "spigot-1.14-2.jar"
builderUrl = "https://hub.spigotmc.org/jenkins/job/BuildTools/101/artifact/target/BuildTools.jar"
buildCommand = "java -jar {BUILDER} --rev 1.14"
builtLibraryName = ["spigot-1.14.jar"]
}
task updateRuntimeLibraries(type: UpdateLibrariesTask) {
directory = librariesRuntimeDirectory
libraries = []
manualLibraries = new HashSet<>(Arrays.asList(updateSpigot.targetLibraryName))
}
task updateShadeLibraries(type: UpdateLibrariesTask) {
directory = librariesShadeDirectory
libraries = []
}
sourceSets {
main {
java {
srcDirs = ['src']
}
resources {
srcDirs = ['resources']
}
}
test {
java {
srcDirs = ['tests']
}
}
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
shadow fileTree(dir: librariesRuntimeDirectory, include: '*.jar')
compile fileTree(dir: librariesShadeDirectory, include: '*.jar')
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
compile group: 'it.unimi.dsi', name: 'fastutil', version: '8.2.2'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
annotationProcessor fileTree(dir: annotationProcessorsDirectory, include: '*.jar')
shadow fileTree(dir: annotationProcessorsDirectory, include: '*.jar')
testCompile fileTree(dir: librariesRuntimeDirectory, include: '*.jar')
testCompile fileTree(dir: librariesShadeDirectory, include: '*.jar')
testCompile 'org.junit.jupiter:junit-jupiter-api:5.2.0'
testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.2.0'
}
compileJava {
options.encoding = 'UTF-8'
options.incremental = false
options.compilerArgs << ("-Aprotocolsupportbuildprocessor.generatedresourcesdirectory=" + newFile(generatedResourcesDirectory, resourcesDirectoryName, "preload").getAbsolutePath())
}
test {
useJUnitPlatform()
}
task generateLocaleList(type: DefaultTask) {doLast{
File langsListFile = newFile(generatedResourcesDirectory, resourcesDirectoryName, "i18n", "languages")
langsListFile.getParentFile().mkdirs()
langsListFile.createNewFile()
new PrintWriter(langsListFile).withCloseable({
writer ->
newFile(sourceSets.main.resources.srcDirs.iterator().next(), resourcesDirectoryName, "i18n").list()
.each({
String[] split = it.split("[.]");
if (split.length == 2 && split[1].equals("json")) {
writer.println(split[0])
}
})
})
}}
task generateInfo(type: DefaultTask) {doLast{
Properties properties = new Properties()
properties.setProperty("buildtime", new Date().format("yyyy.MM.dd 'at' HH:mm:ss z"))
properties.setProperty("buildhost", System.getProperty("protocolsupport.buildhost", "unknown"))
properties.setProperty("buildnumber", System.getProperty("protocolsupport.buildnumber", "unknown"))
File buildInfoFile = newFile(generatedResourcesDirectory, resourcesDirectoryName, "buildinfo")
buildInfoFile.getParentFile().mkdirs()
buildInfoFile.createNewFile()
new FileOutputStream(buildInfoFile).withCloseable({ properties.store(it, "Build info") })
}}
shadowJar {
doFirst {
new File(destinationDir, archiveName).delete()
}
from sourceSets.main.java.srcDirs
from 'LICENSE'
from generatedResourcesDirectory
archiveName = jar.archiveName
minimizeJar = true
exclude 'META-INF/**'
relocate 'org.apache', 'protocolsupport.libs.org.apache'
relocate 'it.unimi.dsi.fastutil', 'protocolsupport.libs.it.unimi.dsi.fastutil'
relocate 'com.google.gson', 'protocolsupport.libs.com.google.gson'
}
task copyFinalJarToTarget(type: DefaultTask) {doLast{
java.nio.file.Files.copy(
jar.archivePath.getAbsoluteFile().toPath(),
new File(targetJarDirectory, jar.baseName + '.jar').getAbsoluteFile().toPath(),
java.nio.file.StandardCopyOption.REPLACE_EXISTING
)
}}
compileJava.dependsOn(clean)
compileJava.dependsOn(setupFolders)
compileJava.dependsOn(updateSpigot)
compileJava.dependsOn(updateRuntimeLibraries)
compileJava.dependsOn(updateShadeLibraries)
compileJava.finalizedBy(test)
jar.enabled = false
jar.finalizedBy(shadowJar)
shadowJar.dependsOn(generateInfo)
shadowJar.dependsOn(generateLocaleList)
shadowJar.finalizedBy(copyFinalJarToTarget)