From de17b5900f312cce836438a4e6e24a4e1ca5dec3 Mon Sep 17 00:00:00 2001 From: A248 Date: Sat, 8 Jul 2023 17:17:27 +0600 Subject: [PATCH] Turn jakarta-inject into an optionally provided dependency (#214) --- .../bootstrap/DependencyBundle.java | 3 +- .../bootstrap/LibertyBansLauncher.java | 7 +++- .../arim/libertybans/bootstrap/Platform.java | 18 +++++++-- .../arim/libertybans/bootstrap/Platforms.java | 23 +++++------ .../src/main/resources/dependencies/jakarta | 4 ++ bans-distribution/download/pom.xml | 1 + bans-distribution/executable/pom.xml | 1 + .../src/assembly/final-executable.xml | 7 +++- .../executable/src/assembly/jakarta.xml | 39 +++++++++++++++++++ .../src/assembly/self-implementation.xml | 4 +- 10 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 bans-bootstrap/src/main/resources/dependencies/jakarta create mode 100644 bans-distribution/executable/src/assembly/jakarta.xml diff --git a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/DependencyBundle.java b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/DependencyBundle.java index e361dec50..b2bd478db 100644 --- a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/DependencyBundle.java +++ b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/DependencyBundle.java @@ -1,6 +1,6 @@ /* * LibertyBans - * Copyright © 2021 Anand Beh + * Copyright © 2023 Anand Beh * * LibertyBans is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -42,6 +42,7 @@ enum DependencyBundle { CAFFEINE(Repositories.CENTRAL_REPO), + JAKARTA(Repositories.CENTRAL_REPO), KYORI(Repositories.CENTRAL_REPO), SELF_IMPLEMENTATION(Repositories.ARIM_AFFERO_GPL3), SLF4J(Repositories.CENTRAL_REPO); diff --git a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/LibertyBansLauncher.java b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/LibertyBansLauncher.java index 6204873f3..40342bd56 100644 --- a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/LibertyBansLauncher.java +++ b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/LibertyBansLauncher.java @@ -1,6 +1,6 @@ /* * LibertyBans - * Copyright © 2022 Anand Beh + * Copyright © 2023 Anand Beh * * LibertyBans is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -116,6 +116,11 @@ private Set determineNeededDependencies(Set } else { bundles.add(DependencyBundle.CAFFEINE); } + if (platform.isJakartaProvided()) { + librariesRequiringProtection.remove(ProtectedLibrary.JAKARTA_INJECT); + } else { + bundles.add(DependencyBundle.JAKARTA); + } if (platform.hasKyoriAdventureSupport()) { librariesRequiringProtection.remove(ProtectedLibrary.KYORI_ADVENTURE); librariesRequiringProtection.remove(ProtectedLibrary.KYORI_EXAMINATION); diff --git a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platform.java b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platform.java index 59707ca80..7f60e9e06 100644 --- a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platform.java +++ b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platform.java @@ -1,6 +1,6 @@ /* * LibertyBans - * Copyright © 2022 Anand Beh + * Copyright © 2023 Anand Beh * * LibertyBans is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -28,15 +28,17 @@ public final class Platform { private final boolean slf4j; private final boolean kyoriAdventure; private final boolean caffeine; + private final boolean jakarta; private final boolean hikariCP; Platform(Category category, String platformName, - boolean slf4j, boolean kyoriAdventure, boolean caffeine, boolean hikariCP) { + boolean slf4j, boolean kyoriAdventure, boolean caffeine, boolean jakarta, boolean hikariCP) { this.category = Objects.requireNonNull(category, "category"); this.platformName = Objects.requireNonNull(platformName, "platformName"); this.slf4j = slf4j; this.kyoriAdventure = kyoriAdventure; this.caffeine = caffeine; + this.jakarta = jakarta; this.hikariCP = hikariCP; } @@ -60,6 +62,10 @@ public boolean isCaffeineProvided() { return caffeine; } + public boolean isJakartaProvided() { + return jakarta; + } + public boolean hasHiddenHikariCP() { return hikariCP; } @@ -74,6 +80,7 @@ public static final class Builder { private boolean slf4j; private boolean kyoriAdventure; private boolean caffeine; + private boolean jakarta; private boolean hikariCP; private Builder(Category category) { @@ -95,13 +102,18 @@ public Builder caffeineProvided(LibraryDetection caffeine) { return this; } + public Builder jakartaProvided(LibraryDetection jakarta) { + this.jakarta = jakarta.evaluatePresence(); + return this; + } + public Builder hiddenHikariCP(LibraryDetection hikariCP) { this.hikariCP = hikariCP.evaluatePresence(); return this; } public Platform build(String platformName) { - return new Platform(category, platformName, slf4j, kyoriAdventure, caffeine, hikariCP); + return new Platform(category, platformName, slf4j, kyoriAdventure, caffeine, jakarta, hikariCP); } } diff --git a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platforms.java b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platforms.java index 288e654aa..0a5e251b3 100644 --- a/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platforms.java +++ b/bans-bootstrap/src/main/java/space/arim/libertybans/bootstrap/Platforms.java @@ -1,6 +1,6 @@ /* * LibertyBans - * Copyright © 2022 Anand Beh + * Copyright © 2023 Anand Beh * * LibertyBans is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -54,6 +54,7 @@ public static Platform velocity(ClassLoader platformClassLoader) { .kyoriAdventureSupport(LibraryDetection.enabled()) // Caffeine is an internal dependency .caffeineProvided(new LibraryDetection.ByClassLoaderScan(ProtectedLibrary.CAFFEINE, platformClassLoader)) + .jakartaProvided(new LibraryDetection.ByClassLoaderScan(ProtectedLibrary.JAKARTA_INJECT, platformClassLoader)) .build("Velocity"); } @@ -61,18 +62,18 @@ public static Platform velocity(ClassLoader platformClassLoader) { public static Stream allPossiblePlatforms(String platformName) { Set platforms = new HashSet<>(); for (Platform.Category category : Platform.Category.values()) { - for (boolean adventure : new boolean[] {true, false}) { - for (boolean slf4j : new boolean[] {true, false}) { - for (boolean caffeine : new boolean[] {true, false}) { - platforms.add(Platform.builderForCategory(category) - .kyoriAdventureSupport(() -> adventure) - .slf4jSupport(() -> slf4j) - .caffeineProvided(() -> caffeine) - .build("Testing")); - } - } + // Count from 0000 to 1111 in binary + for (int setting = 0; setting < 0b10000; setting++) { + final int flags = setting; + platforms.add(Platform.builderForCategory(category) + .kyoriAdventureSupport(() -> (flags & 0b0001) != 0) + .slf4jSupport(() -> (flags & 0b0010) != 0) + .caffeineProvided(() -> (flags & 0b0100) != 0) + .jakartaProvided(() -> (flags & 0b1000) != 0) + .build(platformName)); } } return platforms.stream(); } + } diff --git a/bans-bootstrap/src/main/resources/dependencies/jakarta b/bans-bootstrap/src/main/resources/dependencies/jakarta new file mode 100644 index 000000000..ae4a00f82 --- /dev/null +++ b/bans-bootstrap/src/main/resources/dependencies/jakarta @@ -0,0 +1,4 @@ +jakarta.inject +jakarta.inject-api +${jakarta-inject.version} +5512882113f8dcb70b087f01e3c11d7d3d505c1671bee6dc47208014599d7830d6f184d249b9db72b351c05dd33259c821b80b784c7b3b6e961eeb03a689644b diff --git a/bans-distribution/download/pom.xml b/bans-distribution/download/pom.xml index ea04b436d..ae54adb14 100644 --- a/bans-distribution/download/pom.xml +++ b/bans-distribution/download/pom.xml @@ -36,6 +36,7 @@ net.kyori:* org.jetbrains:annotations com.github.ben-manes.caffeine:caffeine + jakarta.inject:jakarta.inject-api diff --git a/bans-distribution/executable/pom.xml b/bans-distribution/executable/pom.xml index ee43ea622..5fd710137 100644 --- a/bans-distribution/executable/pom.xml +++ b/bans-distribution/executable/pom.xml @@ -30,6 +30,7 @@ false src/assembly/caffeine.xml + src/assembly/jakarta.xml src/assembly/kyori.xml src/assembly/self-implementation.xml src/assembly/slf4j.xml diff --git a/bans-distribution/executable/src/assembly/final-executable.xml b/bans-distribution/executable/src/assembly/final-executable.xml index 5f7026296..95c118957 100644 --- a/bans-distribution/executable/src/assembly/final-executable.xml +++ b/bans-distribution/executable/src/assembly/final-executable.xml @@ -1,6 +1,6 @@ + + + jakarta-bundle + + jar + + false + + + / + false + false + true + + jakarta.inject:jakarta.inject-api + + + + \ No newline at end of file diff --git a/bans-distribution/executable/src/assembly/self-implementation.xml b/bans-distribution/executable/src/assembly/self-implementation.xml index 22da3055e..7ce1e3675 100644 --- a/bans-distribution/executable/src/assembly/self-implementation.xml +++ b/bans-distribution/executable/src/assembly/self-implementation.xml @@ -1,6 +1,6 @@ com.github.ben-manes.caffeine:caffeine + + jakarta.inject:jakarta.inject-api net.kyori:*