Package net.bytebuddy.dynamic
Class ClassFileLocator.ForJarFile
- java.lang.Object
-
- net.bytebuddy.dynamic.ClassFileLocator.MultiReleaseAware
-
- net.bytebuddy.dynamic.ClassFileLocator.ForJarFile
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,ClassFileLocator
- Enclosing interface:
- ClassFileLocator
@Enhance public static class ClassFileLocator.ForJarFile extends ClassFileLocator.MultiReleaseAware
A class file locator that locates classes within a Java jar file.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface net.bytebuddy.dynamic.ClassFileLocator
ClassFileLocator.Compound, ClassFileLocator.Filtering, ClassFileLocator.ForClassLoader, ClassFileLocator.ForFolder, ClassFileLocator.ForInstrumentation, ClassFileLocator.ForJarFile, ClassFileLocator.ForModule, ClassFileLocator.ForModuleFile, ClassFileLocator.ForUrl, ClassFileLocator.MultiReleaseAware, ClassFileLocator.NoOp, ClassFileLocator.PackageDiscriminating, ClassFileLocator.Resolution, ClassFileLocator.Simple
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
close
Indicates if the jar file should be closed upon closing this class file locator.private java.util.jar.JarFile
jarFile
The jar file to read from.private static java.util.List<java.lang.String>
RUNTIME_LOCATIONS
A list of potential locations of the runtime jar for different platforms.-
Fields inherited from class net.bytebuddy.dynamic.ClassFileLocator.MultiReleaseAware
NO_MULTI_RELEASE
-
Fields inherited from interface net.bytebuddy.dynamic.ClassFileLocator
CLASS_FILE_EXTENSION, META_INF_VERSIONS
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
ForJarFile(int[] version, java.util.jar.JarFile jarFile, boolean close)
Creates a new class file locator for the given jar file.ForJarFile(java.util.jar.JarFile jarFile)
Creates a new class file locator for the given jar file.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
protected byte[]
doLocate(java.lang.String path)
Resolves a possible multi-release entry, if it exists.static ClassFileLocator
of(java.io.File file)
Creates a new class file locator for the given jar file.static ClassFileLocator
of(java.io.File file, ClassFileVersion classFileVersion)
Creates a new class file locator for the given jar file.static ClassFileLocator
of(java.util.jar.JarFile jarFile, ClassFileVersion classFileVersion)
Creates a new class file locator for the given jar file.private static ClassFileLocator
of(java.util.jar.JarFile jarFile, ClassFileVersion classFileVersion, boolean close)
Creates a new class file locator for the given jar file.static ClassFileLocator
ofClassPath()
Resolves a class file locator for the class path that reads class files directly from the file system.static ClassFileLocator
ofClassPath(java.lang.String classPath)
Resolves a class file locator for the class path that reads class files directly from the file system.static ClassFileLocator
ofRuntimeJar()
Resolves a class file locator for the runtime jar.-
Methods inherited from class net.bytebuddy.dynamic.ClassFileLocator.MultiReleaseAware
locate
-
-
-
-
Field Detail
-
RUNTIME_LOCATIONS
private static final java.util.List<java.lang.String> RUNTIME_LOCATIONS
A list of potential locations of the runtime jar for different platforms.
-
jarFile
private final java.util.jar.JarFile jarFile
The jar file to read from.
-
close
@ValueHandling(IGNORE) private final boolean close
Indicates if the jar file should be closed upon closing this class file locator.
-
-
Constructor Detail
-
ForJarFile
public ForJarFile(java.util.jar.JarFile jarFile)
Creates a new class file locator for the given jar file. The jar file will not be closed upon closing this class file locator.- Parameters:
jarFile
- The jar file to read from.
-
ForJarFile
protected ForJarFile(int[] version, java.util.jar.JarFile jarFile, boolean close)
Creates a new class file locator for the given jar file.- Parameters:
version
- Contains the existing multi-release jar folders that are available for the current JVM version in decreasing order.jarFile
- The jar file to read from.close
- Indicates if the jar file should be closed upon closing this class file locator.
-
-
Method Detail
-
of
public static ClassFileLocator of(java.io.File file) throws java.io.IOException
Creates a new class file locator for the given jar file. Multi-release jars are not considered.- Parameters:
file
- The jar file to read from.- Returns:
- A class file locator for the jar file.
- Throws:
java.io.IOException
- If an I/O exception is thrown.
-
of
public static ClassFileLocator of(java.io.File file, ClassFileVersion classFileVersion) throws java.io.IOException
Creates a new class file locator for the given jar file. Multi-release jar files are resolved as if executed on a JVM of the supplied version.- Parameters:
file
- The jar file to read from.classFileVersion
- The class file version to consider when resolving class files in multi-release jars.- Returns:
- A class file locator for the jar file.
- Throws:
java.io.IOException
- If an I/O exception is thrown.
-
of
public static ClassFileLocator of(java.util.jar.JarFile jarFile, ClassFileVersion classFileVersion) throws java.io.IOException
Creates a new class file locator for the given jar file. Multi-release jar files are resolved as if executed on a JVM of the supplied version. The jar file will not be closed upon closing this class file locator.- Parameters:
jarFile
- The jar file to read from.classFileVersion
- The class file version to consider when resolving class files in multi-release jars.- Returns:
- A class file locator for the jar file.
- Throws:
java.io.IOException
- If an I/O exception is thrown.
-
of
private static ClassFileLocator of(java.util.jar.JarFile jarFile, ClassFileVersion classFileVersion, boolean close) throws java.io.IOException
Creates a new class file locator for the given jar file. Multi-release jar files are resolved as if executed on a JVM of the supplied version.- Parameters:
jarFile
- The jar file to read from.classFileVersion
- The class file version to consider when resolving class files in multi-release jars.close
- Indicates if the jar file should be closed upon closing this class file locator.- Returns:
- A class file locator for the jar file.
- Throws:
java.io.IOException
- If an I/O exception is thrown.
-
ofClassPath
public static ClassFileLocator ofClassPath() throws java.io.IOException
Resolves a class file locator for the class path that reads class files directly from the file system. The resulting class file locator does not imply classes on the boot path.- Returns:
- A class file locator for the class path.
- Throws:
java.io.IOException
- If an I/O exception occurs.
-
ofClassPath
public static ClassFileLocator ofClassPath(java.lang.String classPath) throws java.io.IOException
Resolves a class file locator for the class path that reads class files directly from the file system.
Note: The resulting class file locator does not include classes of the bootstrap class loader.
- Parameters:
classPath
- The class path to scan with the elements separated bypath.separator
.- Returns:
- A class file locator for the class path.
- Throws:
java.io.IOException
- If an I/O exception occurs.
-
ofRuntimeJar
public static ClassFileLocator ofRuntimeJar() throws java.io.IOException
Resolves a class file locator for the runtime jar. If such a file does not exist or cannot be located, a runtime exception is thrown.- Returns:
- A class file locator for the runtime jar, if available.
- Throws:
java.io.IOException
- If an I/O exception occurs.
-
doLocate
@MaybeNull protected byte[] doLocate(java.lang.String path) throws java.io.IOException
Resolves a possible multi-release entry, if it exists.- Specified by:
doLocate
in classClassFileLocator.MultiReleaseAware
- Parameters:
path
- The path of the class file.- Returns:
- The class file's binary representation or
null
if it does not exist. - Throws:
java.io.IOException
- If an I/O exception occurs.
-
close
public void close() throws java.io.IOException
- Throws:
java.io.IOException
-
-