Skip to content

Commit

Permalink
Resolve transitive dependencies with libby-maven-resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
AlessioDP committed Mar 25, 2024
1 parent fb9b924 commit 872ba2e
Show file tree
Hide file tree
Showing 8 changed files with 10 additions and 297 deletions.
72 changes: 0 additions & 72 deletions core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,91 +1,19 @@
import groovy.xml.MarkupBuilder
import java.security.MessageDigest
import java.util.Base64

plugins {
id("net.kyori.blossom") version "2.0.1"
}

val libbyMavenResolverRepo = layout.buildDirectory.dir("libby-maven-resolver-repo").get()
val libbyMavenResolverJar = provider {}.flatMap { // Use a provider to not resolve shadowTask task too early
project(":libby-maven-resolver").tasks.named("shadowJar").flatMap { (it as Jar).archiveFile }
}

val deleteLibbyMavenResolver = tasks.register<Delete>("deleteLibbyMavenResolver") {
delete(libbyMavenResolverRepo)
isFollowSymlinks = false
}

val copyLibbyMavenResolver = tasks.register<Copy>("copyLibbyMavenResolver") {
dependsOn(":libby-maven-resolver:shadowJar")
dependsOn(deleteLibbyMavenResolver)
}
setupCopy()

tasks.test {
dependsOn(copyLibbyMavenResolver)
}

sourceSets {
main {
blossom {
javaSources {
property("version", project.version.toString())
property("libbyMavenResolverChecksum", provider {
val md = MessageDigest.getInstance("SHA-256")
val sha256 = md.digest(libbyMavenResolverJar.get().asFile.readBytes())
Base64.getEncoder().encodeToString(sha256)
})
}
}
}
test {
blossom {
javaSources {
property("buildDir", layout.buildDirectory.asFile.get().absolutePath.replace("\\", "\\\\"))
property("libbyMavenResolverRepo", libbyMavenResolverRepo.asFile.absolutePath.replace("\\", "\\\\"))
}
}
}
}

tasks.named("generateJavaTemplates") {
dependsOn(":libby-maven-resolver:shadowJar")
}

fun setupCopy() {
val version = project.version.toString()
val partialPath = "${project.group.toString().replace('.', '/')}/libby-maven-resolver/${version}"
val mainFolder = libbyMavenResolverRepo.dir(partialPath)

copyLibbyMavenResolver {
from(libbyMavenResolverJar)
into(mainFolder)
}

if (!version.endsWith("-SNAPSHOT")) {
return
}

// Generate snapshot's maven-metadata-local.xml
copyLibbyMavenResolver {
doFirst {
mainFolder.file("maven-metadata-local.xml").asFile.printWriter(Charsets.UTF_8).use {
val builder = MarkupBuilder(it)
builder.doubleQuotes = true
builder.mkp.xmlDeclaration(mapOf("version" to "1.0", "encoding" to "UTF-8"))
builder.withGroovyBuilder {
"metadata"("modelVersion" to "1.1.0") {
"groupId"(project.group.toString())
"artifactId"("libby-maven-resolver")
"version"(version)
"versioning"() {
"snapshot"() {
"localCopy"(true)
}
}
}
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,4 @@ public class LibbyProperties {
* User agent string to use when downloading libraries
*/
public static final String HTTP_USER_AGENT = "libby/" + VERSION;

/**
* Checksum of libby-maven-resolver jar
*/
public static final String LIBBY_MAVEN_RESOLVER_CHECKSUM = "{{ libbyMavenResolverChecksum }}";
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.alessiodp.libby.transitive;

import com.alessiodp.libby.LibbyProperties;
import com.alessiodp.libby.Library;
import com.alessiodp.libby.LibraryManager;
import com.alessiodp.libby.Util;
Expand All @@ -25,16 +24,16 @@

/**
* A reflection-based helper for resolving transitive dependencies. It automatically
* downloads Maven Resolver Supplier, Maven Resolver Provider and their transitive dependencies to resolve transitive dependencies.
* downloads Libby Maven Resolver to resolve transitive dependencies.
*
* @see <a href="https://github.com/apache/maven-resolver">Apache Maven Artifact Resolver</a>
* @see <a href="https://github.com/AlessioDP/libby-maven-resolver">Libby Maven Resolver</a>
*/
public class TransitiveDependencyHelper {

/**
* com.alessiodp.libby.transitive.TransitiveDependencyCollector class name for reflections
* com.alessiodp.libby.maven.resolver.TransitiveDependencyCollector class name for reflections
*/
private static final String TRANSITIVE_DEPENDENCY_COLLECTOR_CLASS = replaceWithDots("com{}alessiodp{}libby{}transitive{}TransitiveDependencyCollector");
private static final String TRANSITIVE_DEPENDENCY_COLLECTOR_CLASS = replaceWithDots("com{}alessiodp{}libby{}maven{}resolver{}TransitiveDependencyCollector");

/**
* org.eclipse.aether.artifact.Artifact class name for reflections
Expand Down Expand Up @@ -75,22 +74,22 @@ public TransitiveDependencyHelper(@NotNull LibraryManager libraryManager, @NotNu
IsolatedClassLoader classLoader = new IsolatedClassLoader();

classLoader.addPath(libraryManager.downloadLibrary(Library.builder()
.groupId("com{}alessiodp{}libby")
.groupId("com{}alessiodp{}libby{}maven{}resolver")
.artifactId("libby-maven-resolver")
.version(LibbyProperties.VERSION)
.checksumFromBase64(LibbyProperties.LIBBY_MAVEN_RESOLVER_CHECKSUM)
.version("1.0.0")
.checksumFromBase64("aMujUbcaxqGkNX5LNIwNzJTffn3MH6DrZKzXcu67+Qc=")
.build()
));

try {
Class<?> transitiveDependencyCollectorClass = classLoader.loadClass(TRANSITIVE_DEPENDENCY_COLLECTOR_CLASS);
Class<?> artifactClass = classLoader.loadClass(ARTIFACT_CLASS);

// com.alessiodp.libby.TransitiveDependencyCollector(Path)
// com.alessiodp.libby.maven.resolver.TransitiveDependencyCollector(Path)
Constructor<?> constructor = transitiveDependencyCollectorClass.getConstructor(Path.class);
constructor.setAccessible(true);
transitiveDependencyCollectorObject = constructor.newInstance(saveDirectory);
// com.alessiodp.libby.TransitiveDependencyCollector#findTransitiveDependencies(String, String, String, String, Stream<String>)
// com.alessiodp.libby.maven.resolver.TransitiveDependencyCollector#findTransitiveDependencies(String, String, String, String, Stream<String>)
resolveTransitiveDependenciesMethod = transitiveDependencyCollectorClass.getMethod("findTransitiveDependencies", String.class, String.class, String.class, String.class, Stream.class);
resolveTransitiveDependenciesMethod.setAccessible(true);
// org.eclipse.aether.artifact.Artifact#getGroupId()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,4 @@ public class LibbyTestProperties {
* Build dir path
*/
public static final String BUILD_DIR = "{{ buildDir }}";

/**
* Local repo set up by gradle for libby-maven-resolver
*/
public static final String LIBBY_MAVEN_RESOLVER_REPO = "{{ libbyMavenResolverRepo }}";
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.alessiodp.libby.transitive;

import com.alessiodp.libby.LibbyTestProperties;
import com.alessiodp.libby.Library;
import com.alessiodp.libby.LibraryManagerMock;
import com.alessiodp.libby.TestUtils;
Expand All @@ -9,7 +8,6 @@
import org.junit.jupiter.api.Test;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

import static org.junit.jupiter.api.Assertions.*;
Expand Down Expand Up @@ -46,8 +44,7 @@ public class TransitiveDownloadingTest {
@BeforeEach
public void setUp() throws Exception {
libraryManager = new LibraryManagerMock();
// Local repo set up by gradle for libby-maven-resolver
libraryManager.addRepository(Paths.get(LibbyTestProperties.LIBBY_MAVEN_RESOLVER_REPO).toUri().toString());
libraryManager.addRepository("https://repo.alessiodp.com/releases");
libraryManager.addMavenCentral();
}

Expand Down
19 changes: 0 additions & 19 deletions maven-resolver/build.gradle.kts

This file was deleted.

This file was deleted.

Loading

0 comments on commit 872ba2e

Please sign in to comment.