Package org.bytedeco.javacpp
Class Loader
- java.lang.Object
-
- org.bytedeco.javacpp.Loader
-
@Properties(inherit=javacpp.class) public class Loader extends java.lang.Object
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 theoffsetof()
orsizeof()
a nativestruct
,class
, orunion
with itsPointer
peer class and aHashMap
initialized by the native libraries insideJNI_OnLoad()
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Loader.Detector
static class
Loader.Helper
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.io.File
cacheDir
User-specified cache directory set and returned bygetCacheDir()
.(package private) static boolean
cacheLibraries
Whether to extract libraries tocacheDir
, set via "org.bytedeco.javacpp.cacheLibraries" system property.(package private) static boolean
canCreateSymbolicLink
Will be set to false when symbolic link creation fails, such as on Windows.private static java.lang.ThreadLocal<java.util.Deque<java.lang.Class<?>>>
classStack
The stack of classes currently being loaded to support more than one class loader.(package private) static boolean
findLibraries
Whether to search libraries in class, module, and library paths, set via "org.bytedeco.javacpp.findLibraries" system property.(package private) static java.util.Map<java.lang.String,java.net.URL[]>
foundLibraries
Contains all the URLs of native libraries that we found to avoid searching for them again.(package private) static java.util.Map<java.lang.String,java.lang.String>
loadedLibraries
Contains all the native libraries that we have loaded to avoid reloading them.private static Logger
logger
(package private) static java.util.WeakHashMap<java.lang.Class<? extends Pointer>,java.util.HashMap<java.lang.String,java.lang.Integer>>
memberOffsets
Containsoffsetof()
andsizeof()
values of native types ofstruct
,class
, andunion
.(package private) static boolean
pathsFirst
Default value forload(..., pathsFirst)
set via "org.bytedeco.javacpp.pathsFirst" system property.private static java.lang.String
PLATFORM
Value created out of "java.vm.name", "os.name", and "os.arch" system properties.private static java.util.Properties
platformProperties
Default platform properties loaded and returned byloadProperties()
.(package private) static java.io.File
tempDir
Temporary directory set and returned bygetTempDir()
.private static boolean
WINDOWS
-
Constructor Summary
Constructors Constructor Description Loader()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.Object
accessGlobalRef(Pointer globalRef)
static Pointer
addressof(java.lang.String symbol)
ReturnsLoader.Helper.addressof(String)
.static java.io.File
cacheResource(java.lang.Class cls, java.lang.String name)
Extracts a resource using theClassLoader
of the specifiedClass
, and returns the cachedFile
.static java.io.File
cacheResource(java.lang.String name)
Extracts a resource using theClassLoader
of the caller class, and returns the cachedFile
.static java.io.File
cacheResource(java.net.URL resourceURL)
ReturnscacheResource(resourceUrl, null)
static java.io.File
cacheResource(java.net.URL resourceURL, java.lang.String target)
Extracts a resource, if the size or last modified timestamp differs from what is in cache, and returns the cachedFile
.static java.io.File[]
cacheResources(java.lang.Class cls, java.lang.String name)
Extracts resources using theClassLoader
of the specifiedClass
, and returns the cachedFile
objects.static java.io.File[]
cacheResources(java.lang.String name)
Extracts resources using theClassLoader
of the caller class, and returns the cachedFile
objects.static boolean
checkPlatform(java.lang.Class<?> cls, java.util.Properties properties)
static boolean
checkPlatform(java.lang.Class<?> cls, java.util.Properties properties, boolean acceptAllExtensions)
static boolean
checkPlatform(Platform platform, java.util.Properties properties)
static boolean
checkPlatform(Platform platform, java.util.Properties properties, boolean acceptAllExtensions, java.lang.String... defaultNames)
static boolean
checkVersion(java.lang.String groupId, java.lang.String artifactId)
ReturnscheckVersion(groupId, artifactId, "-", true, getCallerClass(2))
.static boolean
checkVersion(java.lang.String groupId, java.lang.String artifactId, java.lang.String separator, boolean logWarnings, java.lang.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 void
clearCacheDir()
CallsdeleteDirectory(getCacheDir())
.static java.lang.String
createLibraryLink(java.lang.String filename, ClassProperties properties, java.lang.String libnameversion, java.lang.String... paths)
Creates a version-less symbolic link to a library file, if needed.static void
deleteDirectory(java.io.File directory)
Deletes the directory and all the files in it.static void
deleteGlobalRef(Pointer globalRef)
static java.io.File
extractResource(java.lang.Class cls, java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix)
Extracts by name a resource using theClassLoader
of the specifiedClass
.static java.io.File
extractResource(java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix)
Extracts by name a resource using theClassLoader
of the caller.static java.io.File
extractResource(java.net.URL resourceURL, java.io.File directoryOrFile, java.lang.String prefix, java.lang.String suffix)
ReturnsextractResource(resourceURL, directoryOrFile, prefix, suffix, false)
.static java.io.File
extractResource(java.net.URL resourceURL, java.io.File directoryOrFile, java.lang.String prefix, java.lang.String suffix, boolean cacheDirectory)
Extracts a resource into the specified directory and with the specified prefix and suffix for the filename.static java.io.File[]
extractResources(java.lang.Class cls, java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix)
Extracts by name resources using theClassLoader
of the specifiedClass
.static java.io.File[]
extractResources(java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix)
Extracts by name resources using theClassLoader
of the caller.static java.net.URL[]
findLibrary(java.lang.Class cls, ClassProperties properties, java.lang.String libnameversion)
ReturnsfindLibrary(cls, properties, libnameversion, Loader.pathsFirst)
.static java.net.URL[]
findLibrary(java.lang.Class cls, ClassProperties properties, java.lang.String libnameversion, boolean pathsFirst)
Finds from where the library may be extracted and loaded among theClass
resources.static java.net.URL
findResource(java.lang.Class cls, java.lang.String name)
ReturnsfindResources(cls, name, 1)[0]
or null if none.static java.net.URL[]
findResources(java.lang.Class cls, java.lang.String name)
ReturnsfindResources(cls, name, -1)
.static java.net.URL[]
findResources(java.lang.Class cls, java.lang.String name, int maxLength)
Finds by name resources using theClass
and itsClassLoader
.static java.io.File
getCacheDir()
Creates and returnsSystem.getProperty("org.bytedeco.javacpp.cachedir")
or~/.javacpp/cache/
when not set.static java.lang.Class
getCallerClass(int i)
Returns theClass
object that contains a caller's method.static java.io.File
getCanonicalFile(java.io.File file)
Returnsfile.getCanonicalFile()
orfile.toPath().toRealPath().toFile()
on Windows.static java.lang.String
getCanonicalPath(java.io.File file)
Returnsfile.getCanonicalPath()
orfile.toPath().toRealPath().toString()
on Windows.static java.lang.Class
getEnclosingClass(java.lang.Class cls)
If annotated with properties, returns the argument as "enclosing Class".static Pointer
getJavaVM()
ReturnsLoader.Helper.getJavaVM()
.static java.util.Map<java.lang.String,java.lang.String>
getLoadedLibraries()
Returns a Map that relates each library name to the path of the loaded file.static java.lang.String
getPlatform()
ReturnsPLATFORM
.static java.io.File
getTempDir()
Creates a unique name fortempDir
out ofSystem.getProperty("java.io.tmpdir")
andSystem.nanoTime()
.static java.lang.String
getVersion()
ReturnsgetVersion("org.bytedeco", "javacpp")
.static java.lang.String
getVersion(java.lang.String groupId, java.lang.String artifactId)
ReturnsgetVersion(groupId, artifactId, getCallerClass(2))
.static java.lang.String
getVersion(java.lang.String groupId, java.lang.String artifactId, java.lang.Class cls)
Returns version property fromcls.getResource("META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties")
.static boolean
isLoadLibraries()
ReturnsSystem.getProperty("org.bytedeco.javacpp.loadlibraries")
.static java.lang.String
load()
Returnsload(getCallerClass(2), loadProperties(), Loader.pathsFirst)
.static java.lang.String
load(boolean pathsFirst)
Loads native libraries associated with theClass
of the caller and initializes it.static java.lang.String
load(java.lang.Class cls)
Returnsload(cls, loadProperties(), Loader.pathsFirst)
.static java.lang.String[]
load(java.lang.Class... classes)
Returnsload(classes, true)
.static java.lang.String[]
load(java.lang.Class[] classes, boolean logMessages)
Callsload(Class)
on all top-level enclosing classes found in the array.static java.lang.String
load(java.lang.Class cls, java.lang.String executable)
Returnsload(cls, loadProperties(), Loader.pathsFirst, executable)
.static java.lang.String
load(java.lang.Class cls, java.util.Properties properties, boolean pathsFirst)
Returnsload(cls, properties, pathsFirst, null)
.static java.lang.String
load(java.lang.Class cls, java.util.Properties properties, boolean pathsFirst, java.lang.String executable)
Loads native libraries or executables associated with the givenClass
and initializes it.static void
loadGlobal(java.lang.String filename)
static java.lang.String
loadLibrary(java.lang.Class<?> cls, java.lang.String libnameversion, java.lang.String... preloaded)
ReturnsloadLibrary(findResources(cls, libnameversion), libnameversion, preloaded)
.static java.lang.String
loadLibrary(java.lang.Class<?> cls, java.net.URL[] urls, java.lang.String libnameversion, java.lang.String... preloaded)
Tries to load the library from the URLs in order, extracting resources as necessary.static java.lang.String
loadLibrary(java.lang.String libnameversion, java.lang.String... preloaded)
ReturnsloadLibrary(getCallerClass(2), libnameversion, preloaded)
.static java.lang.String
loadLibrary(java.net.URL[] urls, java.lang.String libnameversion, java.lang.String... preloaded)
ReturnsloadLibrary(null, urls, libnameversion, preloaded)
.static java.util.Properties
loadProperties()
ReturnsloadProperties(false)
.static java.util.Properties
loadProperties(boolean forceReload)
Loads theProperties
associated with the defaultgetPlatform()
.static ClassProperties
loadProperties(java.lang.Class[] cls, java.util.Properties properties, boolean inherit)
For all the classes, loads all properties from each Class annotations for the given platform.static ClassProperties
loadProperties(java.lang.Class cls, java.util.Properties properties, boolean inherit)
Loads all properties from Class annotations for the given platform.static java.util.Properties
loadProperties(java.lang.String name, java.lang.String defaults)
Loads from resources the defaultProperties
of the specified platform name.static Pointer
newGlobalRef(java.lang.Object object)
ReturnsLoader.Helper.newGlobalRef(Object)
.static int
offsetof(java.lang.Class<? extends Pointer> type, java.lang.String member)
Getsoffsetof()
values frommemberOffsets
filled by native libraries.(package private) static void
putMemberOffset(java.lang.Class<? extends Pointer> type, java.lang.String member, int offset)
(package private) static java.lang.Class
putMemberOffset(java.lang.String typeName, java.lang.String member, int offset)
static int
sizeof(java.lang.Class<? extends Pointer> type)
Getssizeof()
values frommemberOffsets
filled by native libraries.static int
totalChips()
ReturnsLoader.Helper.totalChips()
.static int
totalCores()
ReturnsLoader.Helper.totalCores()
.static int
totalProcessors()
ReturnsLoader.Helper.totalProcessors()
.
-
-
-
Field Detail
-
logger
private static final Logger logger
-
PLATFORM
private static final java.lang.String PLATFORM
Value created out of "java.vm.name", "os.name", and "os.arch" system properties. Returned bygetPlatform()
and initialized withLoader.Detector.getPlatform()
.
-
WINDOWS
private static final boolean WINDOWS
-
platformProperties
private static java.util.Properties platformProperties
Default platform properties loaded and returned byloadProperties()
.
-
classStack
private static final java.lang.ThreadLocal<java.util.Deque<java.lang.Class<?>>> classStack
The stack of classes currently being loaded to support more than one class loader.
-
cacheDir
static java.io.File cacheDir
User-specified cache directory set and returned bygetCacheDir()
.
-
tempDir
static java.io.File tempDir
Temporary directory set and returned bygetTempDir()
.
-
foundLibraries
static java.util.Map<java.lang.String,java.net.URL[]> foundLibraries
Contains all the URLs of native libraries that we found to avoid searching for them again.
-
loadedLibraries
static java.util.Map<java.lang.String,java.lang.String> loadedLibraries
Contains all the native libraries that we have loaded to avoid reloading them.
-
canCreateSymbolicLink
static boolean canCreateSymbolicLink
Will be set to false when symbolic link creation fails, such as on Windows. Set via "org.bytedeco.javacpp.canCreateSymbolicLink" system property, defaults to false on Windows only.
-
pathsFirst
static boolean pathsFirst
Default value forload(..., pathsFirst)
set via "org.bytedeco.javacpp.pathsFirst" system property.
-
cacheLibraries
static boolean cacheLibraries
Whether to extract libraries tocacheDir
, set via "org.bytedeco.javacpp.cacheLibraries" system property.
-
findLibraries
static boolean findLibraries
Whether to search libraries in class, module, and library paths, set via "org.bytedeco.javacpp.findLibraries" system property.
-
memberOffsets
static java.util.WeakHashMap<java.lang.Class<? extends Pointer>,java.util.HashMap<java.lang.String,java.lang.Integer>> memberOffsets
Containsoffsetof()
andsizeof()
values of native types ofstruct
,class
, andunion
. AWeakHashMap
is used to prevent the Loader from hanging onto Class objects the user may be trying to unload.
-
-
Method Detail
-
getPlatform
public static java.lang.String getPlatform()
ReturnsPLATFORM
.
-
getCanonicalPath
public static java.lang.String getCanonicalPath(java.io.File file) throws java.io.IOException
Returnsfile.getCanonicalPath()
orfile.toPath().toRealPath().toString()
on Windows.- Returns:
- The canonical pathname string denoting the same file or directory as that abstract pathname.
- Throws:
java.io.IOException
- if an I/O error occurs- See Also:
- https://bugs.openjdk.java.net/browse/JDK-8003887
-
getCanonicalFile
public static java.io.File getCanonicalFile(java.io.File file) throws java.io.IOException
Returnsfile.getCanonicalFile()
orfile.toPath().toRealPath().toFile()
on Windows.- Returns:
- The canonical file denoting the same file or directory as that abstract pathname.
- Throws:
java.io.IOException
- if an I/O error occurs- See Also:
- https://bugs.openjdk.java.net/browse/JDK-8003887
-
loadProperties
public static java.util.Properties loadProperties()
ReturnsloadProperties(false)
.
-
loadProperties
public static java.util.Properties loadProperties(boolean forceReload)
Loads theProperties
associated with the defaultgetPlatform()
.- Parameters:
forceReload
- to reset cachedplatformProperties
even when not null- Returns:
loadProperties(getPlatform(), null)
- See Also:
loadProperties(String, String)
-
loadProperties
public static java.util.Properties loadProperties(java.lang.String name, java.lang.String defaults)
Loads from resources the defaultProperties
of 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
public static boolean checkVersion(java.lang.String groupId, java.lang.String artifactId)
ReturnscheckVersion(groupId, artifactId, "-", true, getCallerClass(2))
.
-
checkVersion
public static boolean checkVersion(java.lang.String groupId, java.lang.String artifactId, java.lang.String separator, boolean logWarnings, java.lang.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
public static java.lang.String getVersion() throws java.io.IOException
ReturnsgetVersion("org.bytedeco", "javacpp")
.- Throws:
java.io.IOException
-
getVersion
public static java.lang.String getVersion(java.lang.String groupId, java.lang.String artifactId) throws java.io.IOException
ReturnsgetVersion(groupId, artifactId, getCallerClass(2))
.- Throws:
java.io.IOException
-
getVersion
public static java.lang.String getVersion(java.lang.String groupId, java.lang.String artifactId, java.lang.Class cls) throws java.io.IOException
Returns version property fromcls.getResource("META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties")
.- Throws:
java.io.IOException
-
getEnclosingClass
public static java.lang.Class getEnclosingClass(java.lang.Class cls)
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:
Platform
,Properties
-
loadProperties
public static ClassProperties loadProperties(java.lang.Class[] cls, java.util.Properties properties, boolean inherit)
For all the classes, loads all properties from each Class annotations for the given platform.
-
loadProperties
public static ClassProperties loadProperties(java.lang.Class cls, java.util.Properties properties, boolean inherit)
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
public static java.lang.Class getCallerClass(int i)
Returns theClass
object 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
null
if not found
-
cacheResource
public static java.io.File cacheResource(java.lang.String name) throws java.io.IOException
Extracts a resource using theClassLoader
of the caller class, and returns the cachedFile
.- Parameters:
name
- the name of the resource passed toClass.getResource(String)
- Throws:
java.io.IOException
- See Also:
cacheResource(Class, String)
-
cacheResource
public static java.io.File cacheResource(java.lang.Class cls, java.lang.String name) throws java.io.IOException
Extracts a resource using theClassLoader
of the specifiedClass
, and returns the cachedFile
.- Parameters:
cls
- the Class from which to load resourcesname
- the name of the resource passed toClass.getResource(String)
- Throws:
java.io.IOException
- See Also:
cacheResource(URL)
-
cacheResources
public static java.io.File[] cacheResources(java.lang.String name) throws java.io.IOException
Extracts resources using theClassLoader
of the caller class, and returns the cachedFile
objects.- Parameters:
name
- of the resources passed tofindResources(Class, String)
- Throws:
java.io.IOException
- See Also:
cacheResources(Class, String)
-
cacheResources
public static java.io.File[] cacheResources(java.lang.Class cls, java.lang.String name) throws java.io.IOException
Extracts resources using theClassLoader
of the specifiedClass
, and returns the cachedFile
objects.- Parameters:
cls
- the Class from which to load resourcesname
- of the resources passed tofindResources(Class, String)
- Throws:
java.io.IOException
- See Also:
cacheResource(URL)
-
cacheResource
public static java.io.File cacheResource(java.net.URL resourceURL) throws java.io.IOException
ReturnscacheResource(resourceUrl, null)
- Throws:
java.io.IOException
-
cacheResource
public static java.io.File cacheResource(java.net.URL resourceURL, java.lang.String target) throws java.io.IOException
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:
java.io.IOException
- if fails to extract resource properly- See Also:
extractResource(URL, File, String, String)
,cacheDir
-
extractResource
public static java.io.File extractResource(java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix) throws java.io.IOException
Extracts by name a resource using theClassLoader
of the caller.- Parameters:
name
- the name of the resource passed toClass.getResource(String)
- Throws:
java.io.IOException
- See Also:
extractResource(URL, File, String, String)
-
extractResource
public static java.io.File extractResource(java.lang.Class cls, java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix) throws java.io.IOException
Extracts by name a resource using theClassLoader
of the specifiedClass
.- Parameters:
cls
- the Class from which to load resourcesname
- the name of the resource passed toClass.getResource(String)
- Throws:
java.io.IOException
- See Also:
extractResource(URL, File, String, String)
-
extractResources
public static java.io.File[] extractResources(java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix) throws java.io.IOException
Extracts by name resources using theClassLoader
of the caller.- Parameters:
name
- of the resources passed tofindResources(Class, String)
- Throws:
java.io.IOException
- See Also:
extractResources(Class, String, File, String, String)
-
extractResources
public static java.io.File[] extractResources(java.lang.Class cls, java.lang.String name, java.io.File directory, java.lang.String prefix, java.lang.String suffix) throws java.io.IOException
Extracts by name resources using theClassLoader
of the specifiedClass
.- Parameters:
cls
- the Class from which to load resourcesname
- of the resources passed tofindResources(Class, String)
- Throws:
java.io.IOException
- See Also:
extractResource(URL, File, String, String)
-
extractResource
public static java.io.File extractResource(java.net.URL resourceURL, java.io.File directoryOrFile, java.lang.String prefix, java.lang.String suffix) throws java.io.IOException
ReturnsextractResource(resourceURL, directoryOrFile, prefix, suffix, false)
.- Throws:
java.io.IOException
-
extractResource
public static java.io.File extractResource(java.net.URL resourceURL, java.io.File directoryOrFile, java.lang.String prefix, java.lang.String suffix, boolean cacheDirectory) throws java.io.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:
java.io.IOException
- if fails to extract resource properly
-
findResource
public static java.net.URL findResource(java.lang.Class cls, java.lang.String name) throws java.io.IOException
ReturnsfindResources(cls, name, 1)[0]
or null if none.- Throws:
java.io.IOException
-
findResources
public static java.net.URL[] findResources(java.lang.Class cls, java.lang.String name) throws java.io.IOException
ReturnsfindResources(cls, name, -1)
.- Throws:
java.io.IOException
-
findResources
public static java.net.URL[] findResources(java.lang.Class cls, java.lang.String name, int maxLength) throws java.io.IOException
Finds by name resources using theClass
and 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:
java.io.IOException
-
deleteDirectory
public static void deleteDirectory(java.io.File directory) throws java.io.IOException
Deletes the directory and all the files in it.- Throws:
java.io.IOException
-
clearCacheDir
public static void clearCacheDir() throws java.io.IOException
CallsdeleteDirectory(getCacheDir())
.- Throws:
java.io.IOException
-
getCacheDir
public static java.io.File getCacheDir() throws java.io.IOException
Creates and returnsSystem.getProperty("org.bytedeco.javacpp.cachedir")
or~/.javacpp/cache/
when not set.- Throws:
java.io.IOException
-
getTempDir
public static java.io.File getTempDir()
Creates a unique name fortempDir
out ofSystem.getProperty("java.io.tmpdir")
andSystem.nanoTime()
.- Returns:
tempDir
-
getLoadedLibraries
public static java.util.Map<java.lang.String,java.lang.String> 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 theBuilder
to tell us not to try to load anything.
-
checkPlatform
public static boolean checkPlatform(java.lang.Class<?> cls, java.util.Properties properties)
-
checkPlatform
public static boolean checkPlatform(java.lang.Class<?> cls, java.util.Properties properties, boolean acceptAllExtensions)
-
checkPlatform
public static boolean checkPlatform(Platform platform, java.util.Properties properties)
-
checkPlatform
public static boolean checkPlatform(Platform platform, java.util.Properties properties, boolean acceptAllExtensions, java.lang.String... defaultNames)
-
load
public static java.lang.String[] load(java.lang.Class... classes)
Returnsload(classes, true)
.
-
load
public static java.lang.String[] load(java.lang.Class[] classes, boolean logMessages)
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
public static java.lang.String load()
Returnsload(getCallerClass(2), loadProperties(), Loader.pathsFirst)
.
-
load
public static java.lang.String load(boolean pathsFirst)
Loads native libraries associated with theClass
of the caller and initializes it.- Parameters:
pathsFirst
- search the library paths first before bundled resources- Returns:
load(getCallerClass(2), loadProperties(), pathsFirst)
- See Also:
getCallerClass(int)
,load(Class, Properties, boolean)
-
load
public static java.lang.String load(java.lang.Class cls)
Returnsload(cls, loadProperties(), Loader.pathsFirst)
.
-
load
public static java.lang.String load(java.lang.Class cls, java.lang.String executable)
Returnsload(cls, loadProperties(), Loader.pathsFirst, executable)
.
-
load
public static java.lang.String load(java.lang.Class cls, java.util.Properties properties, boolean pathsFirst)
Returnsload(cls, properties, pathsFirst, null)
.
-
load
public static java.lang.String load(java.lang.Class cls, java.util.Properties properties, boolean pathsFirst, java.lang.String executable)
Loads native libraries or executables associated with the givenClass
and 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:
java.lang.NoClassDefFoundError
- on Class initialization failurejava.lang.UnsatisfiedLinkError
- on native library loading failure or when interruptedjava.lang.IllegalArgumentException
- whenexecutable
is specified for a class without executables- See Also:
findLibrary(Class, ClassProperties, String, boolean)
,loadLibrary(URL[], String, String...)
-
findLibrary
public static java.net.URL[] findLibrary(java.lang.Class cls, ClassProperties properties, java.lang.String libnameversion)
ReturnsfindLibrary(cls, properties, libnameversion, Loader.pathsFirst)
.
-
findLibrary
public static java.net.URL[] findLibrary(java.lang.Class cls, ClassProperties properties, java.lang.String libnameversion, boolean pathsFirst)
Finds from where the library may be extracted and loaded among theClass
resources. 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 andClassLoader
are 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
public static java.lang.String loadLibrary(java.lang.String libnameversion, java.lang.String... preloaded)
ReturnsloadLibrary(getCallerClass(2), libnameversion, preloaded)
.
-
loadLibrary
public static java.lang.String loadLibrary(java.lang.Class<?> cls, java.lang.String libnameversion, java.lang.String... preloaded)
ReturnsloadLibrary(findResources(cls, libnameversion), libnameversion, preloaded)
.
-
loadLibrary
public static java.lang.String loadLibrary(java.net.URL[] urls, java.lang.String libnameversion, java.lang.String... preloaded)
ReturnsloadLibrary(null, urls, libnameversion, preloaded)
.
-
loadLibrary
public static java.lang.String loadLibrary(java.lang.Class<?> cls, java.net.URL[] urls, java.lang.String libnameversion, java.lang.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 whoseClassLoader
is 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:
java.lang.UnsatisfiedLinkError
- on failure or when interrupted
-
createLibraryLink
public static java.lang.String createLibraryLink(java.lang.String filename, ClassProperties properties, java.lang.String libnameversion, java.lang.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
-
putMemberOffset
static java.lang.Class putMemberOffset(java.lang.String typeName, java.lang.String member, int offset) throws java.lang.ClassNotFoundException
Called by native libraries to putoffsetof()
andsizeof()
values inmemberOffsets
. Tries to load the Class object for typeName using theClassLoader
of the Loader.- Parameters:
typeName
- the name of the peer Class acting as interface to the native typemember
- the name of the native member variable (can be null to retrieve the Class object only)offset
- the value ofoffsetof()
(orsizeof()
whenmember.equals("sizeof")
)- Returns:
Class.forName(typeName, false)
- Throws:
java.lang.ClassNotFoundException
- on Class initialization failure
-
putMemberOffset
static void putMemberOffset(java.lang.Class<? extends Pointer> type, java.lang.String member, int offset)
- Parameters:
type
- the peer Class acting as interface to the native typemember
- the name of the native member variableoffset
- the value ofoffsetof()
(orsizeof()
whenmember.equals("sizeof")
)
-
offsetof
public static int offsetof(java.lang.Class<? extends Pointer> type, java.lang.String member)
Getsoffsetof()
values frommemberOffsets
filled 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
public static int sizeof(java.lang.Class<? extends Pointer> type)
Getssizeof()
values frommemberOffsets
filled 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
public static Pointer addressof(java.lang.String symbol)
ReturnsLoader.Helper.addressof(String)
.
-
loadGlobal
public static void loadGlobal(java.lang.String filename)
-
getJavaVM
public static Pointer getJavaVM()
ReturnsLoader.Helper.getJavaVM()
.
-
newGlobalRef
public static Pointer newGlobalRef(java.lang.Object object)
ReturnsLoader.Helper.newGlobalRef(Object)
.
-
accessGlobalRef
public static java.lang.Object accessGlobalRef(Pointer globalRef)
-
deleteGlobalRef
public static void deleteGlobalRef(Pointer globalRef)
-
-