diff --git a/.gitignore b/.gitignore index 9e54fad..a303ec4 100644 --- a/.gitignore +++ b/.gitignore @@ -399,4 +399,4 @@ FodyWeavers.xsd # CUSTOM target -jsmile* +*jsmile* diff --git a/pom.xml b/pom.xml index 80bfdd5..fc4c644 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ macos - jsmile.jnilib + libjsmile.jnilib @@ -70,7 +70,7 @@ linux64 - jsmile.so + libjsmile.so @@ -92,7 +92,47 @@ com.bayesfusion - jsmile-native-${nativeSuffix} + jsmile-native-win64 + ${smile.version} + zip + true + *jsmile* + + + ${project.basedir}/src/main/resources/ + + + + resource-dependencies + compile + + unpack + + + + + com.bayesfusion + jsmile-native-macos + ${smile.version} + zip + true + *jsmile* + + + ${project.basedir}/src/main/resources/ + + + + resource-dependencies + compile + + unpack + + + + + com.bayesfusion + jsmile-native-linux64 ${smile.version} zip true @@ -104,23 +144,12 @@ - + com.coderplus.maven.plugins copy-rename-maven-plugin 1.0 - - rename-file - compile - - copy - - - ${project.basedir}/src/main/resources/${smileFile} - ${project.basedir}/src/main/resources/jsmile - - copy-file compile @@ -128,12 +157,7 @@ copy - - - ${project.basedir}/src/main/resources/jsmile - ${project.basedir}/src/test/resources/jsmile - ${project.basedir}/src/main/resources/${smileFile} ${project.basedir}/src/test/resources/${smileFile} diff --git a/src/main/java/net/berack/upo/ai/problem3/SmileLib.java b/src/main/java/net/berack/upo/ai/problem3/SmileLib.java index 1587b7d..e1394bb 100644 --- a/src/main/java/net/berack/upo/ai/problem3/SmileLib.java +++ b/src/main/java/net/berack/upo/ai/problem3/SmileLib.java @@ -1,6 +1,8 @@ package net.berack.upo.ai.problem3; +import java.io.File; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.HashMap; @@ -21,12 +23,25 @@ import smile.Network; public class SmileLib { static { + var jsmile = jsmileLibName(); + var loader = SmileLib.class.getClassLoader(); + var resource = loader.getResource(jsmile); + try { - var jsmile = "jsmile"; - var loader = SmileLib.class.getClassLoader(); - var resource = loader.getResource(jsmile); var uri = resource.toURI(); - var path = Path.of(uri).toString(); + var path = ""; + + if(uri.toString().startsWith("jar")) { + var tmp = System.getProperty("java.io.tmpdir"); + var file = new File(tmp + jsmile); + if(!file.exists()) { + var in = resource.openStream(); + Files.copy(in, file.toPath()); + } + path = file.getAbsolutePath(); + } + else path = Path.of(uri).toString(); + System.setProperty("jsmile.native.library", path); } catch (Exception e) { e.printStackTrace(); @@ -53,6 +68,21 @@ public class SmileLib { ); } + /** + * Ritorna il nome della libreria jsmile in base al sistema operativo. + * @return il node del file + */ + private static String jsmileLibName() { + var os = System.getProperty("os.name").toLowerCase(); + if(os.indexOf("win") >= 0) return "jsmile.dll"; + if(os.indexOf("mac") >= 0) return "libjsmile.jnilib"; + if(os.indexOf("nix") >= 0 + || os.indexOf("nux") >= 0 + || os.indexOf("aix") >= 0) return "libjsmile.so"; + + return null; + } + /** * Crea un Network dal file indicato * Il file deve essere una risorsa del jar o un file esterno