public class JarUtil extends Object
Modifier and Type | Class and Description |
---|---|
static interface |
JarUtil.Resolver
Interface allowing users to provide an URL resolver that will convert custom classloader
URLs like Eclipse/OSGi bundleresource: URLs to normal jar: URLs.
|
Constructor and Description |
---|
JarUtil() |
Modifier and Type | Method and Description |
---|---|
static int |
extract(File dest,
Map<String,String> nativeLibMap,
JarFile jarFile,
String nativeLibraryPath,
boolean extractNativeLibraries,
boolean extractClassFiles,
boolean extractOtherFiles)
Extract the files of the given jar file.
|
static String |
getJarBasename(String clazzBinName,
ClassLoader cl)
The Class's
com.jogamp.common.GlueGenVersion
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar basename gluegen-rt.jar will be returned. |
static String |
getJarBasename(URI classJarURI)
The Class's Jar URI
jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar basename gluegen-rt.jar will be returned. |
static String |
getJarEntry(URI classJarURI)
The Class's Jar URI
jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar file's entry /com/jogamp/common/GlueGenVersion.class will be returned. |
static URI |
getJarEntryURI(URI jarFileURI,
String jarEntry) |
static JarFile |
getJarFile(String clazzBinName,
ClassLoader cl) |
static JarFile |
getJarFile(URI jarFileURI) |
static URI |
getJarFileURI(String jarSubUriS) |
static URI |
getJarFileURI(String clazzBinName,
ClassLoader cl)
The Class's
"com.jogamp.common.GlueGenVersion"
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class"
Jar file URI jar:sub_protocol:/some/path/gluegen-rt.jar!/ will be returned. |
static URI |
getJarFileURI(URI jarSubUri) |
static URI |
getJarFileURI(URI baseUri,
String jarFileName) |
static URI |
getJarSubURI(String clazzBinName,
ClassLoader cl)
The Class's
com.jogamp.common.GlueGenVersion
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar file's sub URI sub_protocol:/some/path/gluegen-rt.jar will be returned. |
static URI |
getJarSubURI(URI classJarURI)
The Class's Jar URI
jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar file's sub URI sub_protocol:/some/path/gluegen-rt.jar will be returned. |
static URI |
getJarURI(String clazzBinName,
ClassLoader cl)
The Class's
"com.jogamp.common.GlueGenVersion"
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class"
will be returned. |
static Map<String,String> |
getNativeLibNames(JarFile jarFile)
Return a map from native-lib-base-name to entry-name.
|
static URI |
getRelativeOf(Class<?> classFromJavaJar,
String cutOffInclSubDir,
String relResPath)
Locates the
Jar file URI of a given resource
relative to a given class's Jar's URI. |
static boolean |
hasJarURI(String clazzBinName,
ClassLoader cl)
Returns
true if the Class's "com.jogamp.common.GlueGenVersion"
is loaded from a JarFile and hence has a Jar URI like
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class" . |
static void |
setResolver(JarUtil.Resolver r)
Setting a custom
JarUtil.Resolver instance. |
static void |
validateCertificates(Certificate[] rootCerts,
JarFile jarFile)
Validate the certificates for each native Lib in the jar file.
|
public static void setResolver(JarUtil.Resolver r) throws IllegalArgumentException, IllegalStateException, SecurityException
JarUtil.Resolver
instance.r
- JarUtil.Resolver
to use after querying class file URLs from the classloader.IllegalArgumentException
- if the passed resolver is null
IllegalStateException
- if the resolver has already been set.SecurityException
- if the security manager doesn't have the setFactory
permissionpublic static boolean hasJarURI(String clazzBinName, ClassLoader cl)
true
if the Class's "com.jogamp.common.GlueGenVersion"
is loaded from a JarFile and hence has a Jar URI like
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class"
.
sub_protocol may be "file", "http", etc..
clazzBinName
- "com.jogamp.common.GlueGenVersion"cl
- #getJarURI(String, ClassLoader)}
public static URI getJarURI(String clazzBinName, ClassLoader cl) throws IllegalArgumentException, IOException, URISyntaxException
"com.jogamp.common.GlueGenVersion"
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class"
will be returned.
sub_protocol may be "file", "http", etc..
clazzBinName
- "com.jogamp.common.GlueGenVersion"cl
- ClassLoader to locate the JarFileIllegalArgumentException
- if the URI doesn't match the expected formatting or null argumentsIOException
- if the class's Jar file could not been found by the ClassLoaderURISyntaxException
- if the URI could not be translated into a RFC 2396 URIIOUtil#getClassURL(String, ClassLoader)}
public static String getJarBasename(URI classJarURI) throws IllegalArgumentException
jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar basename gluegen-rt.jar
will be returned.
sub_protocol may be "file", "http", etc..
classJarURI
- as retrieved w/ getJarURI("com.jogamp.common.GlueGenVersion", cl).toURI()
,
i.e. jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
gluegen-rt.jar
IllegalArgumentException
- if the URI doesn't match the expected formatting or is nullIOUtil#getClassURL(String, ClassLoader)}
public static String getJarBasename(String clazzBinName, ClassLoader cl) throws IllegalArgumentException, IOException, URISyntaxException
com.jogamp.common.GlueGenVersion
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar basename gluegen-rt.jar
will be returned.
sub_protocol may be "file", "http", etc..
clazzBinName
- com.jogamp.common.GlueGenVersion
cl
- gluegen-rt.jar
IllegalArgumentException
- if the URI doesn't match the expected formattingIOException
- if the class's Jar file could not been found by the ClassLoader.URISyntaxException
- if the URI could not be translated into a RFC 2396 URIIOUtil#getClassURL(String, ClassLoader)}
public static URI getJarSubURI(URI classJarURI) throws IllegalArgumentException, URISyntaxException
jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar file's sub URI sub_protocol:/some/path/gluegen-rt.jar
will be returned.
sub_protocol may be "file", "http", etc..
classJarURI
- as retrieved w/ getJarURI("com.jogamp.common.GlueGenVersion", cl).toURI()
,
i.e. jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
sub_protocol:/some/path/gluegen-rt.jar
IllegalArgumentException
- if the URI doesn't match the expected formatting or is nullURISyntaxException
- if the URI could not be translated into a RFC 2396 URIIOUtil#getClassURL(String, ClassLoader)}
public static String getJarEntry(URI classJarURI)
jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar file's entry /com/jogamp/common/GlueGenVersion.class
will be returned.classJarURI
- as retrieved w/ getJarURI("com.jogamp.common.GlueGenVersion", cl).toURI()
,
i.e. jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
/com/jogamp/common/GlueGenVersion.class
IOUtil#getClassURL(String, ClassLoader)}
public static URI getJarSubURI(String clazzBinName, ClassLoader cl) throws IllegalArgumentException, IOException, URISyntaxException
com.jogamp.common.GlueGenVersion
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class
Jar file's sub URI sub_protocol:/some/path/gluegen-rt.jar
will be returned.
sub_protocol may be "file", "http", etc..
clazzBinName
- com.jogamp.common.GlueGenVersion
cl
- sub_protocol:/some/path/gluegen-rt.jar
IllegalArgumentException
- if the URI doesn't match the expected formattingIOException
- if the class's Jar file could not been found by the ClassLoaderURISyntaxException
- if the URI could not be translated into a RFC 2396 URIIOUtil#getClassURL(String, ClassLoader)}
public static URI getJarFileURI(String clazzBinName, ClassLoader cl) throws IllegalArgumentException, IOException, URISyntaxException
"com.jogamp.common.GlueGenVersion"
URI jar:sub_protocol:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class"
Jar file URI jar:sub_protocol:/some/path/gluegen-rt.jar!/
will be returned.
sub_protocol may be "file", "http", etc..
clazzBinName
- "com.jogamp.common.GlueGenVersion"cl
- IllegalArgumentException
- if the URI doesn't match the expected formatting or null argumentsIOException
- if the class's Jar file could not been found by the ClassLoaderURISyntaxException
- if the URI could not be translated into a RFC 2396 URIIOUtil#getClassURL(String, ClassLoader)}
public static URI getJarFileURI(URI baseUri, String jarFileName) throws IllegalArgumentException, URISyntaxException
baseUri
- file:/some/path/jarFileName
- gluegen-rt.jarURISyntaxException
IllegalArgumentException
- null argumentspublic static URI getJarFileURI(URI jarSubUri) throws IllegalArgumentException, URISyntaxException
jarSubUri
- file:/some/path/gluegen-rt.jarIllegalArgumentException
- null argumentsURISyntaxException
public static URI getJarFileURI(String jarSubUriS) throws IllegalArgumentException, URISyntaxException
jarSubUriS
- file:/some/path/gluegen-rt.jarIllegalArgumentException
- null argumentsURISyntaxException
public static URI getJarEntryURI(URI jarFileURI, String jarEntry) throws IllegalArgumentException, URISyntaxException
jarFileURI
- jar:file:/some/path/gluegen-rt.jar!/jarEntry
- com/jogamp/common/GlueGenVersion.classIllegalArgumentException
- null argumentsURISyntaxException
public static JarFile getJarFile(String clazzBinName, ClassLoader cl) throws IOException, IllegalArgumentException, URISyntaxException
clazzBinName
- com.jogamp.common.util.cache.TempJarCachecl
- domainIOException
- if the class's Jar file could not been found by the ClassLoaderIllegalArgumentException
- null argumentsURISyntaxException
- if the URI could not be translated into a RFC 2396 URI#getJarFileURI(String, ClassLoader)}
public static JarFile getJarFile(URI jarFileURI) throws IOException, IllegalArgumentException, URISyntaxException
jarFileURI
- jar:file:/some/path/gluegen-rt.jar!/IllegalArgumentException
- null argumentsIOException
- if the Jar file could not been foundURISyntaxException
public static URI getRelativeOf(Class<?> classFromJavaJar, String cutOffInclSubDir, String relResPath) throws IllegalArgumentException, IOException, URISyntaxException
Jar file URI
of a given resource
relative to a given class's Jar's URI.
class's jar url path + cutOffInclSubDir + relResPath,Example #1
classFromJavaJar = com.lighting.Test (in: file:/storage/TestLighting.jar) cutOffInclSubDir = lights/ relResPath = LightAssets.jar Result : file:/storage/lights/LightAssets.jarExample #2
classFromJavaJar = com.lighting.Test (in: file:/storage/lights/TestLighting.jar) cutOffInclSubDir = lights/ relResPath = LightAssets.jar Result : file:/storage/lights/LightAssets.jarTODO: Enhance documentation!
classFromJavaJar
- Used to get the root URI for the class's Jar URI.cutOffInclSubDir
- The cut off included sub-directory prepending the relative resource path.
If the root URI includes cutOffInclSubDir, it is no more added to the result.relResPath
- The relative resource path.IllegalArgumentException
IOException
URISyntaxException
public static Map<String,String> getNativeLibNames(JarFile jarFile)
public static final int extract(File dest, Map<String,String> nativeLibMap, JarFile jarFile, String nativeLibraryPath, boolean extractNativeLibraries, boolean extractClassFiles, boolean extractOtherFiles) throws IOException
If extractNativeLibraries
is true,
native libraries are added to the given nativeLibMap
with the base name to temp file location.
A file is identified as a native library,
if it's name complies with the running platform's native library naming scheme.
Root entries are favored over non root entries in case of naming collisions.
Example on a Unix like machine:
mylib.jar!/sub1/libsour.so -> sour (mapped, unique name) mylib.jar!/sub1/libsweet.so (dropped, root entry favored) mylib.jar!/libsweet.so -> sweet (mapped, root entry favored) mylib.jar!/sweet.dll -> (dropped, not a unix library name)
In order to be compatible with Java Web Start, we need
to extract all root entries from the jar file.
In this case, set all flags to true extractNativeLibraries
.
extractClassFiles
, extractOtherFiles
.
dest
- nativeLibMap
- jarFile
- nativeLibraryPath
- if not null, only extracts native libraries within this path.extractNativeLibraries
- extractClassFiles
- extractOtherFiles
- deepDirectoryTraversal
- IOException
public static final void validateCertificates(Certificate[] rootCerts, JarFile jarFile) throws IOException, SecurityException
Certificate[] rootCerts = Something.class.getProtectionDomain(). getCodeSource().getCertificates();
IOException
SecurityException