diff --git a/build.gradle.kts b/build.gradle.kts index 3e973c0..d71a0b9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -90,12 +90,40 @@ tasks.register("buildAll") { dependsOn(tasks.withType()) } +// Task to merge service files +val prepareServiceFiles = tasks.register("prepareServiceFiles") { + val outputDir = layout.buildDirectory.dir("generated/service-files") + val serviceFile = "META-INF/services/org.adrianvictor.lib.versioning.VersionedServiceRegistrar" + + // Define inputs + val inputFiles = mcVersions.map { ver -> file("src/$ver/resources/$serviceFile") }.filter { it.exists() } + inputs.files(inputFiles) + outputs.dir(outputDir) + + doLast { + val registrars = mutableSetOf() + inputFiles.forEach { file -> + registrars.addAll(file.readLines().filter { it.isNotBlank() }) + } + + val mergedFile = outputDir.get().file(serviceFile).asFile + mergedFile.parentFile.mkdirs() + mergedFile.writeText(registrars.joinToString("\n")) + } +} + tasks.register("bundleAll") { from(sourceSets["main"].output) mcVersions.forEach { ver -> from(sourceSets[ver].output) } + // Include the merged service file + from(prepareServiceFiles) { + into("META-INF/services") + include("org.adrianvictor.lib.versioning.VersionedServiceRegistrar") + } + duplicatesStrategy = DuplicatesStrategy.EXCLUDE archiveClassifier.set("all-implementations") diff --git a/src/main/java/org/adrianvictor/lib/Main.java b/src/main/java/org/adrianvictor/lib/Main.java index a16c99d..6190da1 100644 --- a/src/main/java/org/adrianvictor/lib/Main.java +++ b/src/main/java/org/adrianvictor/lib/Main.java @@ -19,10 +19,13 @@ public class Main extends JavaPlugin { versionedServiceFactory = new DefaultVersionedServiceFactory(versionMatcher); - ServiceLoader registrars = ServiceLoader.load(VersionedServiceRegistrar.class); + ServiceLoader registrars = ServiceLoader.load(VersionedServiceRegistrar.class, getClassLoader()); + int count = 0; for (VersionedServiceRegistrar registrar : registrars) { registrar.register(versionedServiceFactory); + count++; } + getLogger().info("Registered " + count + " version-specific registrars."); getLogger().info("tenkumaLib has been enabled!"); }