Package org.stianloader.mrjmania
Class MRJURLClassLoader
java.lang.Object
java.lang.ClassLoader
java.security.SecureClassLoader
java.net.URLClassLoader
org.stianloader.mrjmania.MRJURLClassLoader
- All Implemented Interfaces:
Closeable,AutoCloseable
Polyfill for the
URLClassLoader regarding the fact that classloaders
can be named in Java 9 and beyond.
In Java 8 this doesn't do much, but in Java 9+ the classloader's name will show up in stacktraces, which is very helpful for diagnosing certain classloading errors.
This classloader is parallel-capable.
-
Constructor Summary
ConstructorsConstructorDescriptionMRJURLClassLoader(@NotNull String name, URL @NotNull [] urls, @Nullable ClassLoader parent) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionstatic final @Nullable StringgetClassloaderName(ClassLoader loader) Returns the name of the given classloader.@NotNull StringgetName()Obtains this classloader's name.static final @Nullable ClassLoaderObtains the platform classloader under Java 9 or above.Methods inherited from class java.net.URLClassLoader
addURL, close, definePackage, findClass, findResource, findResources, getPermissions, getResourceAsStream, getURLs, newInstance, newInstanceMethods inherited from class java.security.SecureClassLoader
defineClass, defineClassMethods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getPackage, getPackages, getParent, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Constructor Details
-
MRJURLClassLoader
public MRJURLClassLoader(@NotNull @NotNull String name, URL @NotNull [] urls, @Nullable @Nullable ClassLoader parent) Constructor.- Parameters:
name- The name of theClassLoader.urls- The URLs for theURLClassLoader, seeURLClassLoader.getURLs().parent- The parent classloader, seeClassLoader.getParent().
-
-
Method Details
-
getClassloaderName
Returns the name of the given classloader. For Java 8, this method only returns for classloaders that are an instance ofMRJURLClassLoader. Otherwise, it returnsnull.For Java 9 and above, it returns a value for any
ClassLoader, provided saidClassLoaderhas been assigned a name.- Parameters:
loader- TheClassLoaderinstance to get the name of.- Returns:
- The name of the given loader.
-
getPlatformClassLoader
Obtains the platform classloader under Java 9 or above. Under Java 8,nullis returned.Keep in mind that while the platform classloader contains the platform classes, it has also access to modules on the modulepath. This means that when using JPMS/Jigsaw, it may load classes that are part of the 'app' classloader. This behaviour contradicts the behaviour for classes present on the classpath, which cannot be loaded through the platform classloader.
- Returns:
- The platform classloader, if present.
-
getName
Obtains this classloader's name.- Overrides:
getNamein classClassLoader- Returns:
- The name of the classloader.
-