AlessioDP / libby

A runtime dependency management library for plugins running in Java-based Minecraft server platforms.
MIT License
81 stars 20 forks source link

Windows issues with Transitive Dependency Resolver #38

Open ItsRainingHP opened 9 months ago

ItsRainingHP commented 9 months ago

The following error is thrown when using the Transitive Dependency Helper on windows machines. I believe the error is caused by failing to convert to a URI for support across Linux/Windows OS. I could be wrong and input is appreciated!


java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.itsrainingplex.libs.com.alessiodp.libby.transitive.TransitiveDependencyHelper.findTransitiveLibraries(TransitiveDependencyHelper.java:170) ~[RDQ-4.1.5.jar:?]
    at com.itsrainingplex.libs.com.alessiodp.libby.LibraryManager.resolveTransitiveLibraries(LibraryManager.java:655) ~[RDQ-4.1.5.jar:?]
    at com.itsrainingplex.rdq.Settings.RManager_Paper.loadLibrary(RManager_Paper.java:21) ~[RDQ-4.1.5.jar:?]
    at com.itsrainingplex.rdq.Settings.Depends.loadWebJars(Depends.java:147) ~[RDQ-4.1.5.jar:?]
    at com.itsrainingplex.rdq.Settings.Depends.loadDepends(Depends.java:74) ~[RDQ-4.1.5.jar:?]
    at com.itsrainingplex.rdq.RDQ.onEnable(RDQ.java:39) ~[RDQ-4.1.5.jar:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:281) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
    at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:190) ~[paper-1.20.4.jar:git-Paper-365]
    at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104) ~[paper-1.20.4.jar:git-Paper-365]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.craftbukkit.v1_20_R3.CraftServer.enablePlugin(CraftServer.java:637) ~[paper-1.20.4.jar:git-Paper-365]
    at org.bukkit.craftbukkit.v1_20_R3.CraftServer.enablePlugins(CraftServer.java:548) ~[paper-1.20.4.jar:git-Paper-365]
    at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:673) ~[paper-1.20.4.jar:git-Paper-365]
    at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:433) ~[paper-1.20.4.jar:git-Paper-365]
    at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:308) ~[paper-1.20.4.jar:git-Paper-365]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1132) ~[paper-1.20.4.jar:git-Paper-365]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:321) ~[paper-1.20.4.jar:git-Paper-365]
    at java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.reflect.InvocationTargetException
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
    at com.itsrainingplex.libs.com.alessiodp.libby.transitive.TransitiveDependencyHelper.findTransitiveLibraries(TransitiveDependencyHelper.java:135) ~[RDQ-4.1.5.jar:?]
    ... 17 more
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 90: C:\Users\XXX\Desktop\Server\plugins\RDQ\lib\org\webjars\npm\csstype\maven-metadata-https:\repo1.maven.org\maven2\resolver-status.properties
    at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:204) ~[?:?]
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:175) ~[?:?]
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) ~[?:?]
    at sun.nio.fs.WindowsPath.parse(WindowsPath.java:92) ~[?:?]
    at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:231) ~[?:?]
    at java.io.File.toPath(File.java:2401) ~[?:?]
    at org.eclipse.aether.internal.impl.DefaultTrackingFileManager.read(DefaultTrackingFileManager.java:56) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.read(DefaultUpdateCheckManager.java:461) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.checkMetadata(DefaultUpdateCheckManager.java:261) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolve(DefaultMetadataResolver.java:303) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolveMetadata(DefaultMetadataResolver.java:180) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.apache.maven.repository.internal.DefaultVersionRangeResolver.getVersions(DefaultVersionRangeResolver.java:189) ~[maven-resolver-provider-3.9.6.jar:3.9.6]
    at org.apache.maven.repository.internal.DefaultVersionRangeResolver.resolveVersionRange(DefaultVersionRangeResolver.java:142) ~[maven-resolver-provider-3.9.6.jar:3.9.6]
    at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.cachedResolveRangeResult(DependencyCollectorDelegate.java:406) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency(DfDependencyCollector.java:202) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency(DfDependencyCollector.java:156) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.process(DfDependencyCollector.java:138) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.doRecurse(DfDependencyCollector.java:343) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency(DfDependencyCollector.java:277) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency(DfDependencyCollector.java:156) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.process(DfDependencyCollector.java:138) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.doCollectDependencies(DfDependencyCollector.java:108) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies(DependencyCollectorDelegate.java:222) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:87) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:328) ~[maven-resolver-impl-1.9.18.jar:1.9.18]
    at com.itsrainingplex.libs.com.alessiodp.libby.transitive.TransitiveDependencyCollector.findTransitiveDependencies(TransitiveDependencyCollector.java:96) ~[?:?]
    at com.itsrainingplex.libs.com.alessiodp.libby.transitive.TransitiveDependencyCollector.findTransitiveDependencies(TransitiveDependencyCollector.java:115) ~[?:?]
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
    at com.itsrainingplex.libs.com.alessiodp.libby.transitive.TransitiveDependencyHelper.findTransitiveLibraries(TransitiveDependencyHelper.java:135) ~[RDQ-4.1.5.jar:?]
    ... 17 more
[21:30:39] [Server thread/INFO]: [RDQ] Disabling RDQ v4.1.5
frengor commented 9 months ago

Can you post the code which creates the Library object that's giving the error? And also the part which adds the repositories.

ItsRainingHP commented 9 months ago

No problem! Here is the relevant portion. Please note: the only change I make when overriding Library is removing the logger messages.

    public static void loadDepends() {
        RDQ.getInstance().sendLoggerInfo("Getting depends...");
        RManager rManager;
        if (paper) {
            rManager = new RManager_Paper(RDQ.getInstance());
        } else {
            rManager = new RManager_Bukkit(RDQ.getInstance());
        }
        rManager.addMavenCentral();
        rManager.addJitPack();
        loadWebJars(rManager);
        RDQ.getInstance().sendLoggerInfo("Dependencies loaded...");
    }
    private static void loadWebJars(@NotNull RManager rManager) {
        Library vue = Library.builder()
                .groupId("org.webjars.npm")
                .artifactId("vue")
                .version("3.3.4")
                .resolveTransitiveDependencies(true)
                .build();
        rManager.loadLibrary(vue);
    }
    @Override
    public void loadLibrary(@NotNull Library library) {
        Path file = this.downloadLibrary((Library) Objects.requireNonNull(library, "library"));
        if (library.resolveTransitiveDependencies()) {
            this.resolveTransitiveLibraries(library);
        }
        if (library.isIsolatedLoad()) {
            this.addToIsolatedClasspath(library, file);
        } else {
            this.addToClasspath(file);
        }
    }
ItsRainingHP commented 9 months ago

Java's nio is throwing the error likely due to the "/" which needs to change to "\\" here:

    public TransitiveDependencyCollector(Path saveDirectory) {
        this.saveDirectory = saveDirectory;
        this.repositorySystemSession = newRepositorySystemSession(repositorySystem);
    }

Something like:

    public TransitiveDependencyCollector(Path saveDirectory) {
        this.saveDirectory = saveDirectory.replace("/", "\\");
        this.repositorySystemSession = newRepositorySystemSession(repositorySystem);
    }
ItsRainingHP commented 8 months ago

This seems to be an error with Maven's resolver. For users that run into this issue. Load all the transitive libraries manually using LibraryManager#Builder.