Skip to content

Commit

Permalink
Move dependency downloader code out of project
Browse files Browse the repository at this point in the history
  • Loading branch information
jpenilla committed Nov 2, 2023
1 parent 13c1e98 commit 2ed9025
Show file tree
Hide file tree
Showing 13 changed files with 51 additions and 517 deletions.
1 change: 1 addition & 0 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies {
implementation(libs.pluginYml)
implementation(libs.minotaur)
implementation(libs.configurateYaml)
implementation(libs.gremlin.gradle)
compileOnly("com.fasterxml.jackson.core:jackson-core:2.14.0")
compileOnly("com.fasterxml.jackson.core:jackson-annotations:2.14.0")

Expand Down
109 changes: 0 additions & 109 deletions build-logic/src/main/kotlin/WriteDependencies.kt

This file was deleted.

23 changes: 7 additions & 16 deletions build-logic/src/main/kotlin/carbon.platform-conventions.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
plugins {
id("carbon.base-conventions")
id("com.modrinth.minotaur")
id("xyz.jpenilla.gremlin-gradle")
}

decorateVersion()

val runtimeDownload: Configuration by configurations.creating {
isCanBeResolved = true
isCanBeConsumed = false
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
}

configurations.runtimeDownload {
exclude("org.slf4j", "slf4j-api")
exclude("com.google.errorprone", "error_prone_annotations")
exclude("io.leangen.geantyref", "geantyref")
Expand Down Expand Up @@ -76,19 +71,15 @@ modrinth {
gameVersions.addAll("1.19.4", "1.20.2")
}

val writeDeps = tasks.register("writeDependencies", WriteDependencies::class) {
tree.set(runtimeDownload.incoming.resolutionResult.rootComponent)
files.from(runtimeDownload)
outputFileName.set("carbon-dependencies.list")
outputDir.set(layout.buildDirectory.dir("generated/dependencyList"))
tasks.writeDependencies {
outputFileName.set("carbon-dependencies.txt")
repos.add("https://repo.papermc.io/repository/maven-public/")
repos.add("https://repo.maven.apache.org/maven2/")
}

sourceSets.main {
resources {
srcDir(writeDeps)
}
gremlin {
defaultJarRelocatorDependencies.set(false)
defaultGremlinRuntimeDependency.set(false)
}

//val projectVersion = version as String
Expand Down
18 changes: 4 additions & 14 deletions build-logic/src/main/kotlin/extensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.filter
import org.gradle.kotlin.dsl.the
import org.gradle.language.jvm.tasks.ProcessResources
import xyz.jpenilla.gremlin.gradle.ShadowGremlin

fun ProcessResources.replace(
pattern: String,
Expand All @@ -27,23 +28,11 @@ fun ProcessResources.replace(
val Project.releaseNotes: Provider<String>
get() = providers.environmentVariable("RELEASE_NOTES")

fun Task.relocateDependency(pkg: String) {
when (this) {
is ShadowJar -> relocateDependency(pkg)
is WriteDependencies -> relocateDependency(pkg)
else -> error("relocateDependency must be called on a ShadowJar or WriteDependencies task, not ${this.javaClass.name}")
}
}

/**
* Relocate a package into the `carbonchat.libs.` namespace.
*/
fun ShadowJar.relocateDependency(pkg: String) {
relocate(pkg, "carbonchat.libs.$pkg")
}

fun WriteDependencies.relocateDependency(pkg: String) {
relocate(pkg, "carbonchat.libs.$pkg")
fun Task.relocateDependency(pkg: String) {
ShadowGremlin.relocate(this, pkg, "carbonchat.libs.$pkg")
}

fun Task.standardRuntimeRelocations() {
Expand Down Expand Up @@ -81,6 +70,7 @@ fun Task.standardRelocations() {
relocateDependency("ninja.egg82.messenger")
relocateDependency("org.antlr")
relocateDependency("com.electronwill")
relocateDependency("xyz.jpenilla.gremlin")
}

fun Task.relocateCloud() {
Expand Down
36 changes: 0 additions & 36 deletions build-logic/src/main/kotlin/utils.kt

This file was deleted.

2 changes: 1 addition & 1 deletion common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {

dependencies {
api(projects.carbonchatApi)
api(libs.gremlin.runtime)
compileOnlyApi(platform(libs.log4jBom))
compileOnlyApi(libs.log4jApi)

Expand Down Expand Up @@ -58,7 +59,6 @@ dependencies {
api(libs.kyoriMoonshineCore)
api(libs.kyoriMoonshineStandard)

compileOnlyApi(libs.jarRelocator)
compileOnlyApi(libs.caffeine)

// we shade and relocate a newer version than minecraft provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,50 +19,33 @@
*/
package net.draycia.carbon.common.util;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.Objects;
import java.util.Set;
import org.apache.logging.log4j.LogManager;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.framework.qual.DefaultQualifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import xyz.jpenilla.gremlin.runtime.DependencyCache;
import xyz.jpenilla.gremlin.runtime.DependencyResolver;
import xyz.jpenilla.gremlin.runtime.DependencySet;

@DefaultQualifier(NonNull.class)
public final class CarbonDependencies {

private CarbonDependencies() {
}

public static void load(
final Path cacheDir,
final Exceptions.CheckedConsumer<Path, Throwable> addToClasspath
) {
final DependencyDownloader downloader = new DependencyDownloader(
LogManager.getLogger(CarbonDependencies.class.getSimpleName()),
cacheDir
);

try (final InputStream stream = Objects.requireNonNull(
CarbonDependencies.class.getClassLoader().getResourceAsStream("carbon-dependencies.list"),
"Could not get InputStream for carbon-dependencies.list"
)) {
downloader.load(stream);
} catch (final IOException ex) {
throw new RuntimeException("Failed to load dependency list", ex);
}

final Set<Path> resolved = downloader.resolve();

try {
for (final Path dep : resolved) {
addToClasspath.accept(dep);
}
} catch (final Error e) {
throw e;
} catch (final Throwable thr) {
throw new RuntimeException("Failed to add dependencies to classpath", thr);
public static Set<Path> resolve(final Path cacheDir) {
final DependencySet deps = DependencySet.readFromClasspathResource(
CarbonDependencies.class.getClassLoader(), "carbon-dependencies.txt");
final DependencyCache cache = new DependencyCache(cacheDir);
final Logger logger = LoggerFactory.getLogger(CarbonDependencies.class.getSimpleName());
final Set<Path> files;
try (final DependencyResolver downloader = new DependencyResolver(logger)) {
files = downloader.resolve(deps, cache).jarFiles();
}
cache.cleanup();
return files;
}

}
Loading

0 comments on commit 2ed9025

Please sign in to comment.