From 8adb7e3021030705d36f1a21232cb94fc0501adf Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Fri, 2 Feb 2024 19:02:56 +0100 Subject: [PATCH] Native libraries: support Gradle cache when running in development environment (issue #800) --- .../formdev/flatlaf/ui/FlatNativeLibrary.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeLibrary.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeLibrary.java index 9c57aba7..5ffc2a6a 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeLibrary.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeLibrary.java @@ -178,21 +178,39 @@ class FlatNativeLibrary // build library file String libraryName = buildLibraryName( jarFile, classifier, ext ); - File parent = jarFile.getParentFile(); + File jarDir = jarFile.getParentFile(); // check whether native library exists in same directory as jar - File libraryFile = new File( parent, libraryName ); + File libraryFile = new File( jarDir, libraryName ); if( libraryFile.isFile() ) return libraryFile; // if jar is in "lib" directory, then also check whether native library exists // in "../bin" directory - if( parent.getName().equalsIgnoreCase( "lib" ) ) { - libraryFile = new File( parent.getParentFile(), "bin/" + libraryName ); + if( jarDir.getName().equalsIgnoreCase( "lib" ) ) { + libraryFile = new File( jarDir.getParentFile(), "bin/" + libraryName ); if( libraryFile.isFile() ) return libraryFile; } + // special case: support Gradle cache when running in development environment + // /.gradle/caches/modules-2/files-2.1/com.formdev/flatlaf///flatlaf-.jar + // /.gradle/caches/modules-2/files-2.1/com.formdev/flatlaf///flatlaf--windows-x86_64.dll + String path = jarDir.getAbsolutePath().replace( '\\', '/' ); + if( path.contains( "/.gradle/caches/" ) ) { + File versionDir = jarDir.getParentFile(); + if( libraryName.contains( versionDir.getName() ) ) { + File[] dirs = versionDir.listFiles(); + if( dirs != null ) { + for( File dir : dirs ) { + libraryFile = new File( dir, libraryName ); + if( libraryFile.isFile() ) + return libraryFile; + } + } + } + } + // native library not found return null; }