diff --git a/build.gradle b/build.gradle
index a86e153a6..0ea41c7d4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,7 +2,6 @@ import org.ajoberstar.grgit.Grgit
buildscript {
repositories {
- mavenLocal()
mavenCentral()
maven { url = "https://oss.sonatype.org/content/repositories/snapshots/" }
jcenter()
@@ -10,8 +9,6 @@ buildscript {
configurations.all {
resolutionStrategy {
- force 'com.google.guava:guava:21.0'
- force 'org.ow2.asm:asm:6.0_BETA'
force 'commons-io:commons-io:2.4'
}
}
@@ -27,12 +24,19 @@ plugins {
id "org.ajoberstar.grgit" version "3.1.1"
}
-apply plugin: 'java'
+println """
+*******************************************
+ You are building WorldEdit!
-def splashFile = new File('splash.txt')
-if (splashFile.exists()) {
- print splashFile.text
-}
+ If you encounter trouble:
+ 1) Read COMPILING.md if you haven't yet
+ 2) Try running 'build' in a separate Gradle run
+ 3) Use gradlew and not gradle
+ 4) If you still need help, ask on Discord! https://discord.gg/ngZCzbU
+
+ Output files will be in /target
+*******************************************
+"""
group = 'com.boydti.fawe'
@@ -61,39 +65,56 @@ version = String.format("%s.%s", rootVersion, buildNumber)
description = rootProject.name
subprojects {
+ repositories {
+ mavenCentral()
+ maven { url "http://maven.sk89q.com/repo/" }
+ maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
+ maven { url "http://repo.maven.apache.org/maven2" }
+ // Fawe
+ maven { url "https://mvnrepository.com/artifact/" }
+ maven { url "http://repo.dmulloy2.net/content/groups/public/" }
+ maven { url "https://repo.destroystokyo.com/repository/maven-public//" }
+ maven { url "http://ci.athion.net/job/PlotSquared-Breaking/ws/mvn/" }
+ maven { url "https://libraries.minecraft.net" }
+ mavenLocal()
+ maven { url "http://empcraft.com/maven2" }
+ maven { url "https://hub.spigotmc.org/nexus/content/groups/public/" }
+ maven { url "http://ci.frostcast.net/plugin/repository/everything" }
+ maven { url "http://maven.sk89q.com/artifactory/repo" }
+ maven { url "http://repo.spongepowered.org/maven" }
+ maven { url "http://dl.bintray.com/tastybento/maven-repo" }
+ maven { url "http://ci.emc.gs/nexus/content/groups/aikar/" }
+ }
+ configurations.all {
+ resolutionStrategy {
+ cacheChangingModulesFor 5, 'minutes'
+ }
+ }
+}
+
+configure(['worldedit-core', 'worldedit-bukkit', 'favs'].collect { project("$it") }) {
apply plugin: 'java'
apply plugin: 'maven'
+// apply plugin: 'checkstyle'
apply plugin: 'com.github.johnrengelman.shadow'
- //Enable this requires putting license header files in many, many FAWE files
- //apply plugin: 'net.minecrell.licenser'
+// Enable this requires putting license header files in many, many FAWE files
+// apply plugin: 'net.minecrell.licenser'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
+// checkstyle.configFile = new File(rootProject.projectDir, "config/checkstyle/checkstyle.xml")
+// checkstyle.toolVersion = '7.6.1'
+
clean.doFirst {
delete "../target"
}
- compileJava { options.compilerArgs += ["-parameters"] }
-
- repositories {
- mavenCentral()
- maven { url "http://maven.sk89q.com/repo/" }
- maven { url "http://repo.maven.apache.org/maven2" }
- // Fawe
- maven {url "https://mvnrepository.com/artifact/"}
- maven {url "http://repo.dmulloy2.net/content/groups/public/"}
- maven {url "https://repo.destroystokyo.com/repository/maven-public//"}
- maven {url "http://ci.athion.net/job/PlotSquared-Breaking/ws/mvn/"}
- maven { url "https://libraries.minecraft.net" }
- mavenLocal()
- maven {url "http://empcraft.com/maven2"}
- maven {url "https://hub.spigotmc.org/nexus/content/groups/public/"}
- maven {url "http://ci.frostcast.net/plugin/repository/everything"}
- maven {url "http://maven.sk89q.com/artifactory/repo"}
- maven {url "http://repo.spongepowered.org/maven"}
- maven {url "http://dl.bintray.com/tastybento/maven-repo"}
- maven {url "http://ci.emc.gs/nexus/content/groups/aikar/" }
+ if (JavaVersion.current().isJava8Compatible()) {
+ // Java 8 turns on doclint which we fail
+ tasks.withType(Javadoc) {
+ options.addStringOption('Xdoclint:none', '-quiet')
+ }
}
if (!(name.equals('worldedit-forge') || name.equals('worldedit-sponge'))) {
@@ -108,46 +129,50 @@ subprojects {
build.dependsOn(sourcesJar)
}
+// build.dependsOn(checkstyleMain)
+// build.dependsOn(checkstyleTest)
+
dependencies {
compileOnly 'org.jetbrains:annotations:17.0.0'
}
- shadowJar {
- classifier 'dist'
- dependencies {
- include(dependency('com.sk89q:jchronic:0.2.4a'))
- include(dependency('com.thoughtworks.paranamer:paranamer:2.6'))
- include(dependency('com.sk89q.lib:jlibnoise:1.0.0'))
- include(dependency('com.github.luben:zstd-jni:1.1.1'))
- include(dependency('co.aikar:fastutil-lite:1.0'))
- include(dependency('org.jetbrains:annotations:17.0.0'))
+ configure(['bukkit'].collect { project(":worldedit-$it") }) {
+ shadowJar {
+ classifier 'dist'
+ dependencies {
+ include(project(":worldedit-libs:core"))
+ include(project(":worldedit-libs:${project.name.replace("worldedit-", "")}"))
+ include(project(":worldedit-core"))
+ }
+ exclude 'GradleStart**'
+ exclude '.cache'
+ exclude 'LICENSE*'
}
- exclude 'GradleStart**'
- exclude '.cache'
- exclude 'LICENSE*'
+
+ // Enable this requires putting license header files in many, many FAWE files
+ //license {
+ // header = rootProject.file("HEADER.txt")
+ // include '**/*.java'
+ //}
}
+ task aggregatedJavadocs(type: Javadoc, description: 'Generate javadocs from all child projects as if it was a single project', group: 'Documentation') {
+ destinationDir = file("./docs/javadoc")
+ title = "$project.name $version API"
+ options.author true
+ options.links 'http://docs.spring.io/spring/docs/4.3.x/javadoc-api/', 'http://docs.oracle.com/javase/8/docs/api/', 'http://docs.spring.io/spring-ws/docs/2.3.0.RELEASE/api/', 'http://docs.spring.io/spring-security/site/docs/4.0.4.RELEASE/apidocs/'
+ options.addStringOption('Xdoclint:none', '-quiet')
- // Enable this requires putting license header files in many, many FAWE files
- //license {
- // header = rootProject.file("HEADER.txt")
- // include '**/*.java'
- //}
-}
-task aggregatedJavadocs(type: Javadoc, description: 'Generate javadocs from all child projects as if it was a single project', group: 'Documentation') {
- destinationDir = file("./docs/javadoc")
- title = "$project.name $version API"
- options.author true
- options.links 'http://docs.spring.io/spring/docs/4.3.x/javadoc-api/', 'http://docs.oracle.com/javase/8/docs/api/', 'http://docs.spring.io/spring-ws/docs/2.3.0.RELEASE/api/', 'http://docs.spring.io/spring-security/site/docs/4.0.4.RELEASE/apidocs/'
- options.addStringOption('Xdoclint:none', '-quiet')
+ delete "./docs"
- delete "./docs"
-
- subprojects.each { proj ->
- proj.tasks.withType(Javadoc).each { javadocTask ->
- source += javadocTask.source
- classpath += javadocTask.classpath
- excludes += javadocTask.excludes
- includes += javadocTask.includes
+ subprojects.each { proj ->
+ proj.tasks.withType(Javadoc).each { javadocTask ->
+ source += javadocTask.source
+ classpath += javadocTask.classpath
+ excludes += javadocTask.excludes
+ includes += javadocTask.includes
+ }
}
}
+
+
}
diff --git a/settings.gradle b/settings.gradle
index 4c96db613..a9c7e611e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,11 @@
rootProject.name = 'FastAsyncWorldEdit'
-include 'worldedit-core', 'worldedit-bukkit', 'favs'
\ No newline at end of file
+include 'worldedit-libs'
+
+['bukkit', 'core'].forEach {
+ include "worldedit-libs:$it"
+ include "worldedit-$it"
+}
+include "worldedit-libs:core:ap"
+
+include 'favs'
diff --git a/worldedit-bukkit/build.gradle b/worldedit-bukkit/build.gradle
index 3d5e99d23..fb0785413 100644
--- a/worldedit-bukkit/build.gradle
+++ b/worldedit-bukkit/build.gradle
@@ -1,21 +1,29 @@
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven'
+apply plugin: 'java-library'
repositories {
maven { url "https://hub.spigotmc.org/nexus/content/groups/public" }
maven { url "https://repo.codemc.org/repository/maven-public" }
- maven { url 'https://papermc.io/repo/repository/maven-public/' }
+ maven { url "https://papermc.io/repo/repository/maven-public/" }
+}
+
+configurations.all { Configuration it ->
+ it.resolutionStrategy { ResolutionStrategy rs ->
+ rs.force("com.google.guava:guava:21.0")
+ }
}
dependencies {
- compile project(':worldedit-core')
-
+ api project(':worldedit-core')
+ api project(':worldedit-libs:bukkit')
compile 'net.milkbowl.vault:VaultAPI:1.7'
- compile 'com.sk89q:dummypermscompat:1.10'
compile 'com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT'
+ implementation 'io.papermc:paperlib:1.0.2'
+ compileOnly 'com.sk89q:dummypermscompat:1.10'
compile 'org.spigotmc:spigot:1.13.2-R0.1-SNAPSHOT'
- compile 'org.slf4j:slf4j-jdk14:1.7.26'
+ implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.1'
testCompile 'org.mockito:mockito-core:1.9.0-rc1'
compile 'com.massivecraft:factions:2.8.0'
compile 'com.drtshock:factions:1.6.9.5'
@@ -81,9 +89,13 @@ task copyFiles {
shadowJar {
dependencies {
relocate "org.slf4j", "com.sk89q.worldedit.slf4j"
+ relocate "org.apache.logging.slf4j", "com.sk89q.worldedit.log4jbridge"
include(dependency(':worldedit-core'))
include(dependency('org.slf4j:slf4j-api'))
- include(dependency("org.slf4j:slf4j-jdk14"))
+ include(dependency("org.apache.logging.log4j:log4j-slf4j-impl"))
+ relocate ("io.papermc.lib", "com.sk89q.worldedit.bukkit.paperlib") {
+ include(dependency("io.papermc:paperlib:1.0.2"))
+ }
}
archiveName = "${parent.name}-${project.name.replaceAll("worldedit-", "")}-${parent.version}.jar"
destinationDir = file '../target'
diff --git a/worldedit-core/build.gradle b/worldedit-core/build.gradle
index 612041f71..a06223774 100644
--- a/worldedit-core/build.gradle
+++ b/worldedit-core/build.gradle
@@ -1,24 +1,38 @@
+apply plugin: 'java-library'
apply plugin: 'eclipse'
apply plugin: 'idea'
repositories {
maven {url "http://ci.athion.net/job/PlotSquared-Breaking/ws/mvn/"}
}
+
+configurations.all { Configuration it ->
+ it.resolutionStrategy { ResolutionStrategy rs ->
+ rs.force("com.google.guava:guava:21.0")
+ }
+}
+
dependencies {
+ compile project(':worldedit-libs:core')
compile 'de.schlichtherle:truezip:6.8.3'
compile 'rhino:js:1.7R2'
+ compile 'org.yaml:snakeyaml:1.23'
compile 'com.google.guava:guava:21.0'
- compile 'com.sk89q:jchronic:0.2.4a'
compile 'com.google.code.findbugs:jsr305:1.3.9'
compile 'com.thoughtworks.paranamer:paranamer:2.6'
compile 'com.google.code.gson:gson:2.8.0'
- compile 'com.sk89q.lib:jlibnoise:1.0.0'
compile 'com.googlecode.json-simple:json-simple:1.1.1'
compile 'org.slf4j:slf4j-api:1.7.26'
+
+ compileOnly project(':worldedit-libs:core:ap')
+ annotationProcessor project(':worldedit-libs:core:ap')
+ annotationProcessor "com.google.guava:guava:21.0"
+ def avVersion = "1.6.5"
+ compileOnly "com.google.auto.value:auto-value-annotations:$avVersion"
+ annotationProcessor "com.google.auto.value:auto-value:$avVersion"
//compile 'net.sf.trove4j:trove4j:3.0.3'
testCompile 'org.mockito:mockito-core:1.9.0-rc1'
// Fawe depends
- compile 'org.yaml:snakeyaml:1.19'
compile 'net.fabiozumbi12:redprotect:1.9.6'
compile ("com.github.intellectualsites.plotsquared:PlotSquared-API:latest") {
transitive = false
@@ -28,6 +42,10 @@ dependencies {
compile 'co.aikar:fastutil-lite:1.0'
}
+tasks.withType(JavaCompile).configureEach {
+ it.options.compilerArgs.add("-Aarg.name.key.prefix=")
+}
+
sourceSets {
main {
java {
diff --git a/worldedit-libs/build.gradle b/worldedit-libs/build.gradle
new file mode 100644
index 000000000..7227c1772
--- /dev/null
+++ b/worldedit-libs/build.gradle
@@ -0,0 +1,143 @@
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+/*
+
+This project shades API libraries, i.e. those libraries
+whose classes are publicly referenced from `-core` classes.
+
+This project does not shade implementation libraries, i.e.
+those libraries whose classes are internally depended on.
+
+This is because the main reason for shading those libraries is for
+their internal usage in each platform, not because we need them available to
+dependents of `-core` to compile and work with WorldEdit's API.
+
+ */
+configure(subprojects + project("core:ap")) {
+ apply plugin: 'maven'
+ apply plugin: 'com.github.johnrengelman.shadow'
+ apply plugin: 'com.jfrog.artifactory'
+ configurations {
+ create("shade")
+ getByName("archives").extendsFrom(getByName("default"))
+ }
+
+ group = rootProject.group + ".worldedit-libs"
+
+ tasks.register("jar", ShadowJar) {
+ configurations = [project.configurations.shade]
+ classifier = ""
+
+ dependencies {
+ exclude(dependency("com.google.guava:guava"))
+ exclude(dependency("com.google.code.gson:gson"))
+ exclude(dependency("org.checkerframework:checker-qual"))
+ }
+
+ relocate('net.kyori.text', 'com.sk89q.worldedit.util.formatting.text')
+ }
+ def altConfigFiles = { String artifactType ->
+ def deps = configurations.shade.incoming.dependencies
+ .collect { it.copy() }
+ .collect { dependency ->
+ dependency.artifact { artifact ->
+ artifact.name = dependency.name
+ artifact.type = artifactType
+ artifact.extension = 'jar'
+ artifact.classifier = artifactType
+ }
+ dependency
+ }
+
+ return files(configurations.detachedConfiguration(deps as Dependency[])
+ .resolvedConfiguration.lenientConfiguration.getArtifacts()
+ .findAll { it.classifier == artifactType }
+ .collect { zipTree(it.file) })
+ }
+ tasks.register("sourcesJar", Jar) {
+ from {
+ altConfigFiles('sources')
+ }
+ def filePattern = ~'(.*)net/kyori/text((?:/|$).*)'
+ def textPattern = ~/net\.kyori\.text/
+ eachFile {
+ it.filter { String line ->
+ line.replaceFirst(textPattern, 'com.sk89q.worldedit.util.formatting.text')
+ }
+ it.path = it.path.replaceFirst(filePattern, '$1com/sk89q/worldedit/util/formatting/text$2')
+ }
+ classifier = "sources"
+ }
+
+ artifacts {
+ add("default", jar)
+ add("archives", sourcesJar)
+ }
+
+ tasks.register("install", Upload) {
+ configuration = configurations.archives
+ repositories.mavenInstaller {
+ pom.version = project.version
+ pom.artifactId = project.name
+ }
+ }
+
+ artifactoryPublish {
+ publishConfigs('default')
+ }
+
+ build.dependsOn(jar, sourcesJar)
+}
+
+def textExtrasVersion = "3.0.2"
+project("core") {
+ def textVersion = "3.0.1"
+ def pistonVersion = '0.4.1'
+
+ dependencies {
+ shade "net.kyori:text-api:$textVersion"
+ shade "net.kyori:text-serializer-gson:$textVersion"
+ shade "net.kyori:text-serializer-legacy:$textVersion"
+ shade "net.kyori:text-serializer-plain:$textVersion"
+ shade('com.sk89q:jchronic:0.2.4a') {
+ exclude(group: "junit", module: "junit")
+ }
+ shade 'com.thoughtworks.paranamer:paranamer:2.6'
+ shade 'com.sk89q.lib:jlibnoise:1.0.0'
+ shade "org.enginehub.piston:core:$pistonVersion"
+ shade "org.enginehub.piston.core-ap:runtime:$pistonVersion"
+ shade "org.enginehub.piston:default-impl:$pistonVersion"
+ }
+
+ project("ap") {
+ dependencies {
+ shade "org.enginehub.piston.core-ap:annotations:$pistonVersion"
+ shade "org.enginehub.piston.core-ap:processor:$pistonVersion"
+ }
+ }
+}
+project("bukkit") {
+ repositories {
+ maven {
+ name = "SpigotMC"
+ url = "https://hub.spigotmc.org/nexus/content/repositories/snapshots/"
+ }
+ }
+ dependencies {
+ shade "net.kyori:text-adapter-bukkit:$textExtrasVersion"
+ }
+}
+/*project("sponge") {
+ repositories {
+ maven {
+ name = "Sponge"
+ url = "https://repo.spongepowered.org/maven"
+ }
+ }
+ dependencies {
+ shade "net.kyori:text-adapter-spongeapi:$textExtrasVersion"
+ }
+}*/
+
+tasks.register("build") {
+ dependsOn(subprojects.collect { it.tasks.named("build") })
+}