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