Package org.bytedeco.javacpp
Class Loader
java.lang.Object
org.bytedeco.javacpp.Loader
The Loader contains functionality to load native libraries, but also has a bit
of everything that does not fit anywhere else. In addition to its library loading
features, it also has utility methods to get the platform name, to load properties
from Java resources and from Class annotations, to extract file resources to the
temporary directory, and to get the
offsetof() or sizeof() a native
struct, class, or union with its Pointer peer class
and a HashMap initialized by the native libraries inside JNI_OnLoad().- Author:
- Samuel Audet
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic ObjectaccessGlobalRef(Pointer globalRef) static PointerReturnsLoader.Helper.addressof(String).static FilecacheResource(Class cls, String name) static FilecacheResource(String name) Extracts a resource using theClassLoaderof the caller class, and returns the cachedFile.static FilecacheResource(URL resourceURL) ReturnscacheResource(resourceUrl, null)static FilecacheResource(URL resourceURL, String target) Extracts a resource, if the size or last modified timestamp differs from what is in cache, and returns the cachedFile.static File[]cacheResources(Class cls, String name) Extracts resources using theClassLoaderof the specifiedClass, and returns the cachedFileobjects.static File[]cacheResources(String name) Extracts resources using theClassLoaderof the caller class, and returns the cachedFileobjects.static booleancheckPlatform(Class<?> cls, Properties properties) static booleancheckPlatform(Class<?> cls, Properties properties, boolean acceptAllExtensions) static booleancheckPlatform(Platform platform, Properties properties) static booleancheckPlatform(Platform platform, Properties properties, boolean acceptAllExtensions, String... defaultNames) static booleancheckVersion(String groupId, String artifactId) ReturnscheckVersion(groupId, artifactId, "-", true, getCallerClass(2)).static booleancheckVersion(String groupId, String artifactId, String separator, boolean logWarnings, Class cls) ReturnsgetVersion(groupId, artifactId, cls).split(separator)[n].equals(getVersion().split(separator)[0])wheren = versions.length - (versions[versions.length - 1].equals("SNAPSHOT") ? 2 : 1)or false on error.static voidCallsdeleteDirectory(getCacheDir()).static StringcreateLibraryLink(String filename, ClassProperties properties, String libnameversion, String... paths) Creates a version-less symbolic link to a library file, if needed.static voiddeleteDirectory(File directory) Deletes the directory and all the files in it.static voiddeleteGlobalRef(Pointer globalRef) static FileExtracts by name a resource using theClassLoaderof the specifiedClass.static FileextractResource(String name, File directory, String prefix, String suffix) Extracts by name a resource using theClassLoaderof the caller.static FileextractResource(URL resourceURL, File directoryOrFile, String prefix, String suffix) ReturnsextractResource(resourceURL, directoryOrFile, prefix, suffix, false).static FileextractResource(URL resourceURL, File directoryOrFile, String prefix, String suffix, boolean cacheDirectory) Extracts a resource into the specified directory and with the specified prefix and suffix for the filename.static File[]Extracts by name resources using theClassLoaderof the specifiedClass.static File[]extractResources(String name, File directory, String prefix, String suffix) Extracts by name resources using theClassLoaderof the caller.static URL[]findLibrary(Class cls, ClassProperties properties, String libnameversion) ReturnsfindLibrary(cls, properties, libnameversion, Loader.pathsFirst).static URL[]findLibrary(Class cls, ClassProperties properties, String libnameversion, boolean pathsFirst) Finds from where the library may be extracted and loaded among theClassresources.static URLfindResource(Class cls, String name) ReturnsfindResources(cls, name, 1)[0]or null if none.static URL[]findResources(Class cls, String name) ReturnsfindResources(cls, name, -1).static URL[]findResources(Class cls, String name, int maxLength) Finds by name resources using theClassand itsClassLoader.static FileCreates and returnsSystem.getProperty("org.bytedeco.javacpp.cachedir")or~/.javacpp/cache/when not set.static ClassgetCallerClass(int i) Returns theClassobject that contains a caller's method.static FilegetCanonicalFile(File file) Returnsfile.getCanonicalFile()orfile.toPath().toRealPath().toFile()on Windows.static StringgetCanonicalPath(File file) Returnsfile.getCanonicalPath()orfile.toPath().toRealPath().toString()on Windows.static ClassgetEnclosingClass(Class cls) If annotated with properties, returns the argument as "enclosing Class".static PointerReturnsLoader.Helper.getJavaVM().Returns a Map that relates each library name to the path of the loaded file.static StringReturnsPLATFORM.static FileCreates a unique name fortempDirout ofSystem.getProperty("java.io.tmpdir")andSystem.nanoTime().static StringReturnsgetVersion("org.bytedeco", "javacpp").static StringgetVersion(String groupId, String artifactId) ReturnsgetVersion(groupId, artifactId, getCallerClass(2)).static StringgetVersion(String groupId, String artifactId, Class cls) Returns version property fromcls.getResource("META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties").static booleanReturnsSystem.getProperty("org.bytedeco.javacpp.loadlibraries").static Stringload()Returnsload(getCallerClass(2), loadProperties(), Loader.pathsFirst).static Stringload(boolean pathsFirst) Loads native libraries associated with theClassof the caller and initializes it.static StringReturnsload(cls, loadProperties(), Loader.pathsFirst).static String[]Returnsload(classes, true).static String[]Callsload(Class)on all top-level enclosing classes found in the array.static StringReturnsload(cls, loadProperties(), Loader.pathsFirst, executable).static Stringload(Class cls, Properties properties, boolean pathsFirst) Returnsload(cls, properties, pathsFirst, null).static Stringload(Class cls, Properties properties, boolean pathsFirst, String executable) Loads native libraries or executables associated with the givenClassand initializes it.static voidloadGlobal(String filename) static StringloadLibrary(Class<?> cls, String libnameversion, String... preloaded) ReturnsloadLibrary(findResources(cls, libnameversion), libnameversion, preloaded).static StringloadLibrary(Class<?> cls, URL[] urls, String libnameversion, String... preloaded) Tries to load the library from the URLs in order, extracting resources as necessary.static StringloadLibrary(String libnameversion, String... preloaded) ReturnsloadLibrary(getCallerClass(2), libnameversion, preloaded).static StringloadLibrary(URL[] urls, String libnameversion, String... preloaded) ReturnsloadLibrary(null, urls, libnameversion, preloaded).static PropertiesReturnsloadProperties(false).static PropertiesloadProperties(boolean forceReload) Loads thePropertiesassociated with the defaultgetPlatform().static ClassPropertiesloadProperties(Class[] cls, Properties properties, boolean inherit) For all the classes, loads all properties from each Class annotations for the given platform.static ClassPropertiesloadProperties(Class cls, Properties properties, boolean inherit) Loads all properties from Class annotations for the given platform.static PropertiesloadProperties(String name, String defaults) Loads from resources the defaultPropertiesof the specified platform name.static PointernewGlobalRef(Object object) ReturnsLoader.Helper.newGlobalRef(Object).static intGetsoffsetof()values frommemberOffsetsfilled by native libraries.static intGetssizeof()values frommemberOffsetsfilled by native libraries.static intReturnsLoader.Helper.totalChips().static intReturnsLoader.Helper.totalCores().static intReturnsLoader.Helper.totalProcessors().
-
Constructor Details
-
Loader
public Loader()
-
-
Method Details
-
getPlatform
ReturnsPLATFORM. -
getCanonicalPath
Returnsfile.getCanonicalPath()orfile.toPath().toRealPath().toString()on Windows.- Returns:
- The canonical pathname string denoting the same file or directory as that abstract pathname.
- Throws:
IOException- if an I/O error occurs- See Also:
-
getCanonicalFile
Returnsfile.getCanonicalFile()orfile.toPath().toRealPath().toFile()on Windows.- Returns:
- The canonical file denoting the same file or directory as that abstract pathname.
- Throws:
IOException- if an I/O error occurs- See Also:
-
loadProperties
ReturnsloadProperties(false). -
loadProperties
Loads thePropertiesassociated with the defaultgetPlatform().- Parameters:
forceReload- to reset cachedplatformPropertieseven when not null- Returns:
loadProperties(getPlatform(), null)- See Also:
-
loadProperties
Loads from resources the defaultPropertiesof the specified platform name. The resource must be at"org/bytedeco/javacpp/properties/" + name + ".properties". Also picks up system properties starting with "org.bytedeco.javacpp.platform.", which can be used to override default platform properties.- Parameters:
name- the platform namedefaults- the fallback platform name (null == "generic")- Returns:
- the Properties from resources
-
checkVersion
ReturnscheckVersion(groupId, artifactId, "-", true, getCallerClass(2)). -
checkVersion
public static boolean checkVersion(String groupId, String artifactId, String separator, boolean logWarnings, Class cls) ReturnsgetVersion(groupId, artifactId, cls).split(separator)[n].equals(getVersion().split(separator)[0])wheren = versions.length - (versions[versions.length - 1].equals("SNAPSHOT") ? 2 : 1)or false on error. Also callsLogger.warn(String)on error whenlogWarnings && isLoadLibraries(). -
getVersion
ReturnsgetVersion("org.bytedeco", "javacpp").- Throws:
IOException
-
getVersion
ReturnsgetVersion(groupId, artifactId, getCallerClass(2)).- Throws:
IOException
-
getVersion
Returns version property fromcls.getResource("META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties").- Throws:
IOException
-
getEnclosingClass
If annotated with properties, returns the argument as "enclosing Class". If no properties are found on the Class, makes a search for the first Class with properties that we can use, and returns it as the enclosing Class found.- Parameters:
cls- the Class to start the search from- Returns:
- the enclosing Class
- See Also:
-
loadProperties
For all the classes, loads all properties from each Class annotations for the given platform.- See Also:
-
loadProperties
Loads all properties from Class annotations for the given platform. The platform of interest needs to be specified as the value of the "platform" key in the properties argument. It is also possible to indicate whether to load all the classes specified in theProperties.inherit()annotation recursively via the inherit argument.- Parameters:
cls- the Class of which to return Propertiesproperties- the platform Properties to inheritinherit- indicates whether or not to inherit properties from other classes- Returns:
- all the properties associated with the Class for the given platform
-
getCallerClass
Returns theClassobject that contains a caller's method.- Parameters:
i- the offset on the call stack of the method of interest- Returns:
- the Class found from the calling context, or
nullif not found
-
cacheResource
Extracts a resource using theClassLoaderof the caller class, and returns the cachedFile.- Parameters:
name- the name of the resource passed toClass.getResource(String)- Throws:
IOException- See Also:
-
cacheResource
- Parameters:
cls- the Class from which to load resourcesname- the name of the resource passed toClass.getResource(String)- Throws:
IOException- See Also:
-
cacheResources
Extracts resources using theClassLoaderof the caller class, and returns the cachedFileobjects.- Parameters:
name- of the resources passed tofindResources(Class, String)- Throws:
IOException- See Also:
-
cacheResources
Extracts resources using theClassLoaderof the specifiedClass, and returns the cachedFileobjects.- Parameters:
cls- the Class from which to load resourcesname- of the resources passed tofindResources(Class, String)- Throws:
IOException- See Also:
-
cacheResource
ReturnscacheResource(resourceUrl, null)- Throws:
IOException
-
cacheResource
Extracts a resource, if the size or last modified timestamp differs from what is in cache, and returns the cachedFile. If target is not null, creates instead a symbolic link where the resource would have been extracted. Directories from JAR files are extracted recursively.- Parameters:
resourceURL- the URL of the resource to extract and cachetarget- of the symbolic link to create (must be null to have the resource actually extracted)- Returns:
- the File object representing the extracted file from the cache
- Throws:
IOException- if fails to extract resource properly- See Also:
-
extractResource
public static File extractResource(String name, File directory, String prefix, String suffix) throws IOException Extracts by name a resource using theClassLoaderof the caller.- Parameters:
name- the name of the resource passed toClass.getResource(String)- Throws:
IOException- See Also:
-
extractResource
public static File extractResource(Class cls, String name, File directory, String prefix, String suffix) throws IOException Extracts by name a resource using theClassLoaderof the specifiedClass.- Parameters:
cls- the Class from which to load resourcesname- the name of the resource passed toClass.getResource(String)- Throws:
IOException- See Also:
-
extractResources
public static File[] extractResources(String name, File directory, String prefix, String suffix) throws IOException Extracts by name resources using theClassLoaderof the caller.- Parameters:
name- of the resources passed tofindResources(Class, String)- Throws:
IOException- See Also:
-
extractResources
public static File[] extractResources(Class cls, String name, File directory, String prefix, String suffix) throws IOException Extracts by name resources using theClassLoaderof the specifiedClass.- Parameters:
cls- the Class from which to load resourcesname- of the resources passed tofindResources(Class, String)- Throws:
IOException- See Also:
-
extractResource
public static File extractResource(URL resourceURL, File directoryOrFile, String prefix, String suffix) throws IOException ReturnsextractResource(resourceURL, directoryOrFile, prefix, suffix, false).- Throws:
IOException
-
extractResource
public static File extractResource(URL resourceURL, File directoryOrFile, String prefix, String suffix, boolean cacheDirectory) throws IOException Extracts a resource into the specified directory and with the specified prefix and suffix for the filename. If both prefix and suffix arenull, the original filename is used, so directoryOrFile must not benull. Directories from JAR files are extracted recursively.- Parameters:
resourceURL- the URL of the resource to extractdirectoryOrFile- the output directory or file (null == System.getProperty("java.io.tmpdir"))prefix- the prefix of the temporary filename to usesuffix- the suffix of the temporary filename to usecacheDirectory- to extract files from directories only when size or last modified timestamp differs- Returns:
- the File object representing the extracted file
- Throws:
IOException- if fails to extract resource properly
-
findResource
ReturnsfindResources(cls, name, 1)[0]or null if none.- Throws:
IOException
-
findResources
ReturnsfindResources(cls, name, -1).- Throws:
IOException
-
findResources
Finds by name resources using theClassand itsClassLoader. Names not prefixed with '/' are considered in priority relative to the Class, but parent packages, including the default one, also get searched.- Parameters:
cls- the Class from whose ClassLoader to load resourcesname- of the resources passed toClass.getResource(String)andClassLoader.getResources(String)maxLength- of the array to return, or -1 for no limit- Returns:
- URLs to the resources
- Throws:
IOException
-
deleteDirectory
Deletes the directory and all the files in it.- Throws:
IOException
-
clearCacheDir
CallsdeleteDirectory(getCacheDir()).- Throws:
IOException
-
getCacheDir
Creates and returnsSystem.getProperty("org.bytedeco.javacpp.cachedir")or~/.javacpp/cache/when not set.- Throws:
IOException
-
getTempDir
Creates a unique name fortempDirout ofSystem.getProperty("java.io.tmpdir")andSystem.nanoTime().- Returns:
tempDir
-
getLoadedLibraries
Returns a Map that relates each library name to the path of the loaded file. -
isLoadLibraries
public static boolean isLoadLibraries()ReturnsSystem.getProperty("org.bytedeco.javacpp.loadlibraries"). Flag set by theBuilderto tell us not to try to load anything. -
checkPlatform
-
checkPlatform
public static boolean checkPlatform(Class<?> cls, Properties properties, boolean acceptAllExtensions) -
checkPlatform
-
checkPlatform
public static boolean checkPlatform(Platform platform, Properties properties, boolean acceptAllExtensions, String... defaultNames) -
load
Returnsload(classes, true). -
load
Callsload(Class)on all top-level enclosing classes found in the array.- Parameters:
classes- to try to loadlogMessages- on load or fail silently- Returns:
- filenames from each successful call to
load(Class)or null otherwise
-
load
Returnsload(getCallerClass(2), loadProperties(), Loader.pathsFirst). -
load
Loads native libraries associated with theClassof the caller and initializes it.- Parameters:
pathsFirst- search the library paths first before bundled resources- Returns:
load(getCallerClass(2), loadProperties(), pathsFirst)- See Also:
-
load
Returnsload(cls, loadProperties(), Loader.pathsFirst). -
load
Returnsload(cls, loadProperties(), Loader.pathsFirst, executable). -
load
Returnsload(cls, properties, pathsFirst, null). -
load
Loads native libraries or executables associated with the givenClassand initializes it.- Parameters:
cls- the Class to get native library and executable information from and to initializeproperties- the platform Properties to inheritpathsFirst- search the library paths first before bundled resourcesexecutable- the executable name whose path to return, or the first one found when null- Returns:
- the full path to the main file loaded, or the library name if unknown
(but
if (!isLoadLibraries() || cls == null) { return null; }), while in the case of optional libraries or executables, it may return null when not found - Throws:
NoClassDefFoundError- on Class initialization failureUnsatisfiedLinkError- on native library loading failure or when interruptedIllegalArgumentException- whenexecutableis specified for a class without executables- See Also:
-
findLibrary
ReturnsfindLibrary(cls, properties, libnameversion, Loader.pathsFirst). -
findLibrary
public static URL[] findLibrary(Class cls, ClassProperties properties, String libnameversion, boolean pathsFirst) Finds from where the library may be extracted and loaded among theClassresources. But in case that fails, and depending on the value ofpathsFirst, either as a fallback or in priority over bundled resources, also searches the paths found in the "platform.preloadpath" and "platform.linkpath" class properties (as well as the "sun.boot.library.path" and "java.library.path" system properties ifpathsFirst || !loadLibraries), in that order.- Parameters:
cls- the Class whose package name andClassLoaderare used to extract from resourcesproperties- contains the directories to scan for if we fail to extract the library from resourceslibnameversion- the name of the library + ":" + optional exact path to library + "@" + optional version tag + "#" + a second optional name used at extraction (or empty to prevent it, unless it is a second "#") + "!" to load all symbols globallypathsFirst- search the library paths first before bundled resources- Returns:
- URLs that point to potential locations of the library
-
loadLibrary
ReturnsloadLibrary(getCallerClass(2), libnameversion, preloaded). -
loadLibrary
ReturnsloadLibrary(findResources(cls, libnameversion), libnameversion, preloaded). -
loadLibrary
ReturnsloadLibrary(null, urls, libnameversion, preloaded). -
loadLibrary
public static String loadLibrary(Class<?> cls, URL[] urls, String libnameversion, String... preloaded) Tries to load the library from the URLs in order, extracting resources as necessary. Finally, if all fails, falls back onSystem.loadLibrary(String).- Parameters:
cls- the Class whoseClassLoaderis used to load the library, may be nullurls- the URLs to try loading the library fromlibnameversion- the name of the library + ":" + optional exact path to library + "@" + optional version tag + "#" + a second optional name used at extraction (or empty to prevent it, unless it is a second "#") + "!" to load all symbols globallypreloaded- libraries for which to create symbolic links in same cache directory- Returns:
- the full path of the file loaded, or the library name if unknown
(but
if (!isLoadLibraries) { return null; }) - Throws:
UnsatisfiedLinkError- on failure or when interrupted
-
createLibraryLink
public static String createLibraryLink(String filename, ClassProperties properties, String libnameversion, String... paths) Creates a version-less symbolic link to a library file, if needed. Also creates symbolic links in given paths, with and without version.- Parameters:
filename- of the probably versioned libraryproperties- of the class associated with the librarylibnameversion- the library name and version as withloadLibrary(URL[], String, String...)(can be null)paths- where to create links, in addition to the parent directory of filename- Returns:
- the version-less filename (or null on failure), a symbolic link only if needed
-
offsetof
Getsoffsetof()values frommemberOffsetsfilled by native libraries.- Parameters:
type- the peer Class acting as interface to the native typemember- the name of the native member variable- Returns:
memberOffsets.get(type).get(member)
-
sizeof
Getssizeof()values frommemberOffsetsfilled by native libraries.- Parameters:
type- the peer Class acting as interface to the native type- Returns:
memberOffsets.get(type).get("sizeof")
-
totalProcessors
public static int totalProcessors()ReturnsLoader.Helper.totalProcessors(). -
totalCores
public static int totalCores()ReturnsLoader.Helper.totalCores(). -
totalChips
public static int totalChips()ReturnsLoader.Helper.totalChips(). -
addressof
ReturnsLoader.Helper.addressof(String). -
loadGlobal
-
getJavaVM
ReturnsLoader.Helper.getJavaVM(). -
newGlobalRef
ReturnsLoader.Helper.newGlobalRef(Object). -
accessGlobalRef
-
deleteGlobalRef
-