Compare commits

..

2 commits

2 changed files with 32 additions and 1 deletions

View file

@ -90,12 +90,40 @@ tasks.register("buildAll") {
dependsOn(tasks.withType<Jar>()) dependsOn(tasks.withType<Jar>())
} }
// 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<String>()
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<Jar>("bundleAll") { tasks.register<Jar>("bundleAll") {
from(sourceSets["main"].output) from(sourceSets["main"].output)
mcVersions.forEach { ver -> mcVersions.forEach { ver ->
from(sourceSets[ver].output) from(sourceSets[ver].output)
} }
// Include the merged service file
from(prepareServiceFiles) {
into("META-INF/services")
include("org.adrianvictor.lib.versioning.VersionedServiceRegistrar")
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveClassifier.set("all-implementations") archiveClassifier.set("all-implementations")

View file

@ -19,10 +19,13 @@ public class Main extends JavaPlugin {
versionedServiceFactory = new DefaultVersionedServiceFactory(versionMatcher); versionedServiceFactory = new DefaultVersionedServiceFactory(versionMatcher);
ServiceLoader<VersionedServiceRegistrar> registrars = ServiceLoader.load(VersionedServiceRegistrar.class); ServiceLoader<VersionedServiceRegistrar> registrars = ServiceLoader.load(VersionedServiceRegistrar.class, getClassLoader());
int count = 0;
for (VersionedServiceRegistrar registrar : registrars) { for (VersionedServiceRegistrar registrar : registrars) {
registrar.register(versionedServiceFactory); registrar.register(versionedServiceFactory);
count++;
} }
getLogger().info("Registered " + count + " version-specific registrars.");
getLogger().info("tenkumaLib has been enabled!"); getLogger().info("tenkumaLib has been enabled!");
} }