Split up dependencies for multiple version support.

The "core" module will house the entire abstraction layer of mcMMO, while
the "bukkit" and "sponge" modules will house common code to share between
the various versions being supported for each platform. Specifically,
spigot will be split up based on the listener handlers being registered,
and will be shadow packaged according to their targeted Minecraft version.
Sponge's multi-version dependency will be based on the API version, since
the only constant known between the various API versions is the plugin
annotations and basic listener annotations.

Signed-off-by: Gabriel Harris-Rouquette <gabizou@me.com>
This commit is contained in:
Gabriel Harris-Rouquette 2019-02-07 19:55:52 -08:00
parent b14871d499
commit 196ace4b81
No known key found for this signature in database
GPG Key ID: F34C08E5B2D67A0A
10 changed files with 142 additions and 83 deletions

6
.gitignore vendored
View File

@ -67,9 +67,9 @@ hs_err_pid*
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
.idea/modules.xml
.idea/*.iml
.idea/modules
# CMake
cmake-build-*/

View File

@ -1,21 +1,37 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
buildscript {
dependencies {
classpath("com.github.jengelman.gradle.plugins:shadow:4.0.4")
repositories {
jcenter()
}
}
// Extras
var core by extra { project("core") }
// Bukkit/Spigot plugins
val bukkit by extra { project("bukkit") }
val bukkit_18 by extra { bukkit.project("1_8_8") }
val bukkit_112 by extra { bukkit.project("1_12") }
val bukkit_113 by extra { bukkit.project("1_13") }
// Sponge plugins
val sponge by extra { project("sponge") }
val sponge_7 by extra { sponge.project("api7") }
group = properties["pluginGroup"]!!
version = properties["pluginVersion"]!!
plugins {
`java-library`
java
id("com.github.johnrengelman.shadow") version "4.0.4"
}
// Set up defaults for all projects, maven repositories, java compatibility level and compiling encoding
allprojects {
apply(plugin="java-library")
apply(plugin="com.github.johnrengelman.shadow")
repositories {
mavenCentral()
@ -24,13 +40,35 @@ allprojects {
// bStats
maven("https://repo.codemc.org/repository/maven-public")
}
dependencies {
compile("org.apache.tomcat", "tomcat-jdbc", "7.0.52") // tomcat JDBC
compile("org.apache.tomcat", "tomcat-juli", "7.0.52") // tomcat juli
testCompile("junit", "junit", "4.12")
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
tasks.getting(JavaCompile::class) {
options.encoding = "UTF-8"
}
}
val jar by tasks.getting(Jar::class) {
manifest {
attributes(mapOf(
"Implementation-Title" to "mcMMO",
"Implementation-Version" to rootProject.properties["pluginVersion"]!!,
"Main-Class" to "com.gmail.nossr50.mcMMO" // Main plugin class for bukkit
))
}
}
val shadowJar by tasks.getting(ShadowJar::class) {
dependencies {
include(project("core"))
include(dependency("org.bstats:bstats-bukkit:1.4"))
}
relocate("org.bstats", "com.gmail.nossr50.metrics.bstat")
}

View File

@ -0,0 +1,10 @@
plugins {
java
}
dependencies {
implementation("org.spigotmc:spigot-api:1.12.2-R0.1-SNAPSHOT") // Spigot API
implementation("com.sk89q.worldguard", "worldguard-legacy", "6.2") // WorldGuard
}

View File

@ -0,0 +1,10 @@
plugins {
`java-library`
}
dependencies {
implementation("org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT") // Spigot API
implementation("com.sk89q.worldguard", "worldguard-core", "7.0.0-SNAPSHOT") // WorldGuard
implementation("com.sk89q.worldguard", "worldguard-legacy", "7.0.0-SNAPSHOT") // NEEDED
}

View File

@ -0,0 +1,10 @@
plugins {
java
}
dependencies {
implementation("org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT") // Spigot API
implementation("com.sk89q.worldguard:worldguard-legacy:6.1.2") // Old worldguard
}

View File

@ -1,59 +1,34 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
buildscript {
repositories { jcenter() }
dependencies { classpath("com.github.jengelman.gradle.plugins:shadow:4.0.4") }
}
val bukkit: Project by rootProject.extra
val core: Project by rootProject.extra
// This configures the bukkit/spigot ecosystem repositories, so they all share the same repos
allprojects {
repositories {
jcenter()
// Spigot & Bukkit
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
maven("https://oss.sonatype.org/content/repositories/snapshots")
mavenLocal() // For nms variants
}
dependencies {
classpath("com.github.jengelman.gradle.plugins:shadow:4.0.4")
compile(core) // includes junit for tests
compile("org.bstats", "bstats-bukkit", "1.4") // Bukkit bstats
}
}
repositories {
// Spigot & Bukkit
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
maven("https://oss.sonatype.org/content/repositories/snapshots")
mavenLocal() // For nms variants
subprojects {
dependencies {
// Provide the base bukkit plugin dependency for plugin classloading.
// All "versioned" implementations will be properly classloaded by the bukkit parent
(compile(bukkit) as ModuleDependency).apply { exclude("org.spigotmc") }
}
}
plugins {
java
id("com.github.johnrengelman.shadow")
}
dependencies {
implementation("org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT") // Spigot API
implementation("com.sk89q.worldguard", "worldguard-core", "7.0.0-SNAPSHOT") // WorldGuard
implementation("com.sk89q.worldguard", "worldguard-legacy", "7.0.0-SNAPSHOT") // NEEDED
compile("org.bstats", "bstats-bukkit", "1.4") // Bukkit bstats
implementation("org.apache.tomcat", "tomcat-jdbc", "7.0.52") // tomcat JDBC
implementation("org.apache.tomcat", "tomcat-juli", "7.0.52") // tomcat juli
implementation("junit", "junit", "4.12")
compile(project(":core"))
}
java {
sourceSets {
create("nms")
}
}
val jar by tasks.getting(Jar::class) {
manifest {
attributes(mapOf(
"Implementation-Title" to "mcMMO",
"Implementation-Version" to rootProject.properties["pluginVersion"]!!,
"Main-Class" to "com.gmail.nossr50.mcMMO" // Main plugin class for bukkit
))
}
}
val shadowJar by tasks.getting(ShadowJar::class) {
dependencies {
include(project(":core"))
include(dependency("org.bstats:bstats-bukkit:1.4"))
}
relocate("org.bstats", "com.gmail.nossr50.metrics.bstat")
}

View File

@ -2,14 +2,3 @@
plugins {
java
}
dependencies {
implementation("junit", "junit", "4.12")
}
val jar by tasks.getting(Jar::class) {
manifest {
attributes(mapOf(
"Implementation-Title" to project.name,
"Implementation-Version" to project.version
))
}
}

View File

@ -7,7 +7,20 @@
* in the user guide at https://docs.gradle.org/4.9/userguide/multi_project_builds.html
*/
rootProject.name = "mcMMO"
include("core", "bukkit", "sponge")
include(
// Core abstraction layer of mcMMO
"core",
// Bukkit/Spigot versions, core bukkit has plugin class
"bukkit",
"bukkit:1_13",
"bukkit:1_12",
"bukkit:1_8_8",
// Sponge Projects - SpongeAPI follows semver, so API versions can change
"sponge", // Generic plugin class contains references to load specific listeners and registrations between APIs.
"sponge:api7" // API 7 is special for MC 1.12.2
)
pluginManagement {
repositories {

View File

@ -0,0 +1,12 @@
plugins {
java
// Apply the spongegradle plugin to generate the metadata file
id("org.spongepowered.plugin") version "0.9.0" // supplies sponge repo and plugin metadata creation tasks
}
dependencies {
compile("org.spongepowered", "spongeapi", "7.1.0") // SpongeAPI
compile("org.bstats", "bstats-sponge", "1.4") // Sponge bstats
}
description = "mcMMO for Sponge"

View File

@ -1,30 +1,32 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
java
id("org.spongepowered.plugin") version "0.9.0" // supplies sponge repo and plugin metadata creation tasks
id("com.github.johnrengelman.shadow")
}
dependencies {
compile("org.spongepowered", "spongeapi", "7.1.0") // SpongeAPI
compile(project(":core"))
compile("org.bstats", "bstats-sponge", "1.4") // Sponge bstats
}
val core: Project by rootProject.extra
val sponge: Project by rootProject.extra
description = "mcMMO for Sponge"
val jar by tasks.getting(Jar::class) {
manifest {
attributes(mapOf(
"Implementation-Title" to "mcMMO",
"Implementation-Version" to rootProject.properties["pluginVersion"]!!
))
repositories {
// sponge
maven("https://repo.spongepowered.org/maven")
}
dependencies {
implementation(group="org.spongepowered", name="spongeapi", version="7.1.0") // Base version
}
allprojects {
dependencies {
compile(core)
}
}
val shadowJar by tasks.getting(ShadowJar::class) {
subprojects {
dependencies {
include(project(":core"))
(compile(sponge) as ModuleDependency).apply {
exclude("org.spongepowered")
}
}
}
}