Jar/DLL Abhängigkeiten durch User angeben lassen

Kababär

Top Contributor
Hi,

ich arbeite gerade mit OpenCV, welches man für Windows einfach runterladen und installieren kann und wie Linux/Mac selbst bauen muss. Leider gibt es dafür keine Maven-Dependency.
Mein Project ist ein JavaFX Maven Projekt und ist auf github verfügbar, privat, weil es ein Teamprojekt ist.
Mein Problem ist, dass jedes Teammitglied erst mal OpenCV und MySQL installieren muss, bevor er mit dem Project arbeiten kann. Startet man die Applikation, dann wird direkt eine Verbindung zur DB aufgebaut und die Libraries von OpenCV werden geladen (eine jar und eine native library).
Für die DB habe ich eine Lösung.. ich versuche eine Verbindung aufzubauen. Falls die DB nicht existiert führe ich ein Script aus (das das Schema für die DB erstellt), das sich im Resource-Folder befindet und setze dann die entsprechenden Properties.
Doch wie mache ich das mit OpenCV?
Ich vermute mal, die .jar und vorallem die .dll Dateien benötigen weitere Abhängigkeiten (damit meine ich weitere Dateien von OpenCV, die bei der Installation abgelegt/gebaut werden). Kann ich einfach den ganzen Installationsordner auf github, also zusammen mit dem Project, pushen?

Meine Lösung wäre folgende gewesen:
Wie Eclipse, Netbeans, etc. würde ich in den Einstellungen der Applikation dem User die Möglichkeit geben, den Pfad zur OpenCV .jar und .dll anzugeben. Diese würde ich in Properties speichern.
Diese würde ich dann einfach laden, falls die Property gesetzt wurde a la:
Code:
//Unvollständiger Sample-Code:
if(opencvProperty not null){
    System.load(opencvProperty);
    ....
} else {
     deaktiviereGUIElemente();
}
Meine Missmutung: enthält die .dll wirklich alles notwendige (also alle Abhängigkeiten, die sie benötigt?). Denn meines Wissens nach gibt es bei C++ einen Linker, der die Header-Dateien oder so ähnlich miteinander verknüpft..

Also was ich erreichen will:
Das Projekt leicht zum Laufen kriegen, wenn man from the scratch anfängt. Deshalb habe ich mich für Maven und github entschieden. Falls jemand kein MySQL und OpenCV installiert hat, soll es trotzdem reibungslos funktionieren. Ok, ich kann jemandem zutrauen, MySQL zu installieren. Bei OpenCV sieht das etwas anders aus (gerade wenn man mit Linux unterwegs ist). Da würde ich dem User gerne zuvor kommen bzw. ihm die Arbeit ersparen.
Habt ihr eine elegante Lösung, wie ich OpenCV quasi mit in mein Project aufnehme?
Oder geht das gar nicht, weil man die .dll zuerst als solche in der IDE konfigurieren muss?

Hoffe mir kann jemand helfen :)

Falls es noch Fragen gibt, nur raus damit :)
 

RalleYTN

Bekanntes Mitglied
DLLs sind eine Krise. Wenn dein SecurityManager es erlaubt kannst du Ordner dynamisch mit der folgenden Methode zur Laufzeit in den "library path" laden. Alle nativen Bibliotheken, die sich im Ordner befinden stehen somit zur Verfügung(Systemübergreifend und du musst die DLLs nicht einzeln laden). Ist nicht sonderlich elegant, funktioniert aber.... wenn der SecurityManager keine Probleme macht.

Java:
public void addDirectoryToLibraryPath(String directory) throws Exception {

    System.setProperty("java.library.path", directory.replace("/", File.separator).replace("\\", File.separator) + ";" + System.getProperty("java.library.path"));
    Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
    sysPathsField.setAccessible(true);
    sysPathsField.set(null, null);
}
 

JStein52

Top Contributor
Denn meines Wissens nach gibt es bei C++ einen Linker, der die Header-Dateien oder so ähnlich miteinander verknüpft..
Das ist solides Halbwissen. Aber was du machen kannst: es gibt einen dependency walker der .exe und .dll Dateien auf externe Abhängigkeiten untersucht und diese auch anzeigt. Google mal danach. Damit solltest du sehen was deine OpenCV.dll noch so alles braucht.
 

Kababär

Top Contributor
Das ist natürlich auch ne schöne Lösung, bzw erspart mir ne Menge Schreibarbeit. Du sagst allerdings .exe und .dll. Also nur für Windows nutzbar?
 

JStein52

Top Contributor
dll ist sowieso was Windows-spezifisches. Aber die Antwort ist ja. Ich weiss aber nicht ob es für das Pendant auf linux oder Mac auch so etwas gibt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Eclipse Abhängigkeiten zwischen den Projekten in Eclipse Allgemeine Java-Themen 2
N Keine Klassen startbar/mit Abhängigkeiten erstellbar Allgemeine Java-Themen 2
F Jar mit Abhängigkeiten ausführen -> NoClassDefFound Error Allgemeine Java-Themen 16
B Ressourcenleck durch (virtuellen/echten) Thread Allgemeine Java-Themen 11
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
H Dienst durch ssh forwarding absichern? Allgemeine Java-Themen 15
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
P Karate API Test läuft nicht durch . initializationError Allgemeine Java-Themen 21
Y Wie bekomme ich durch getImage an das Image heran? Allgemeine Java-Themen 1
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
W Java Telegram Bot - Eingabe durch User Allgemeine Java-Themen 2
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
I Buchstabe durch seinen Nachfolger ersetzen Allgemeine Java-Themen 29
M Jdeps-Error durch multi-release Allgemeine Java-Themen 6
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
C OpenCl Setup und durch JavaCode ansteuern Allgemeine Java-Themen 17
J Erste Schritte Datenspeicherung durch Java Allgemeine Java-Themen 6
M Hässliche Schrift auf Graphics durch deriveFont Allgemeine Java-Themen 0
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Aruetiise Interface Position durch JButton ermitteln Allgemeine Java-Themen 5
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
T AWT AWT-EventQueue-0 Null_Pointer_Exception durch Variable Allgemeine Java-Themen 12
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Quadrieren einer Zahl nur durch Addition Allgemeine Java-Themen 5
L Vererbung If-Else ersetzen durch was? Allgemeine Java-Themen 20
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
I CountDown wird durch JOptionPane unterbrochen Allgemeine Java-Themen 11
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
Z Durch Bäume iterieren Allgemeine Java-Themen 3
M Unterbrechnung durch Echtzeitbefehle? Allgemeine Java-Themen 4
G Suchweg durch Binärbaum speichern Allgemeine Java-Themen 4
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
S RandomAccessFile durch bytearrayinputstream ersetzen Allgemeine Java-Themen 4
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
H Optimierung durch Threads Allgemeine Java-Themen 31
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
F Live Ticker durch Screenshots Allgemeine Java-Themen 22
C Hex Zeichen ersetzen durch leer Zeichen Allgemeine Java-Themen 5
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
N Algorithmus durch Workflow Allgemeine Java-Themen 7
R Windows-Firewall lässt Java nicht durch Allgemeine Java-Themen 17
E Oracle kann durch 0 teilen !?! Allgemeine Java-Themen 7
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
J Java Datei durch Java Datei öffnen Allgemeine Java-Themen 16
M Arraynamen durch Variable festlegen lassen Allgemeine Java-Themen 5
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
S Bildaufbau durch Servlet -> Exception Allgemeine Java-Themen 11
F Slash durch Systembezogenen Fileseparator ersetzen Allgemeine Java-Themen 18
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
M Eclipse drei slashs durch zwei ersetzen? Allgemeine Java-Themen 3
D Updaten von Klassen durch jar.exe zerstört diese. Update durch WinRAR gelingt! Allgemeine Java-Themen 2
A SWT Ausgabetext Shellscript durch Java Allgemeine Java-Themen 8
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
fastjack Hardwareinformationen durch Java auslesen Allgemeine Java-Themen 7
S durch Code steppen Allgemeine Java-Themen 7
E Durch System.in.read() blockierten Thread stoppen Allgemeine Java-Themen 10
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
C Markierung durch Maus lesen Allgemeine Java-Themen 9
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
N Scanner läuft nicht durch Allgemeine Java-Themen 2
F kamera auslösen durch Programm Allgemeine Java-Themen 17
M Maus durch JavaProgramm bewegen Allgemeine Java-Themen 2
Dissi Itext - Anordnung von Elementen durch PDF Writer Allgemeine Java-Themen 2
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
H Performancegewinn durch Mehrfachobjeknutzung Allgemeine Java-Themen 3
N Fehler abfang läuft doppelt durch Allgemeine Java-Themen 2
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
N int[] eindeutig durch eine Zahl repräsentieren Allgemeine Java-Themen 12
GilbertGrape Durch JDK debuggen Allgemeine Java-Themen 2
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Schleife durch Button beenden Allgemeine Java-Themen 6
royale Breitendurchlauf / Dijkstra durch Graph, vereinfacht Allgemeine Java-Themen 3
Hawkes Beschädigte Tarballs durch JavaTar Allgemeine Java-Themen 2
X Status Anzeige-durch Thread? Allgemeine Java-Themen 15
4 ich steige einfach nicht durch Allgemeine Java-Themen 5
P Thread Demonstrationr eist durch die Zeit Allgemeine Java-Themen 4
D erstellung einer seitenlangen xml durch ireport Allgemeine Java-Themen 3
R Jar-File vom Linux Desktop durch ancklicken starten? Allgemeine Java-Themen 5
M Java Programm durch Datei Öffnen Allgemeine Java-Themen 6
J IOException durch BufferedWriter.flush() ? Allgemeine Java-Themen 5
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
J Zweidimensionales Array durch ZwischenArray ersetzen Allgemeine Java-Themen 3
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
J Chars in einem String durch "nichts" ersetzen Allgemeine Java-Themen 3
C Dateien auf Festplatte speichern durch "Durchsuchen-But Allgemeine Java-Themen 3
B VK_? << durch char rausbekommen Allgemeine Java-Themen 8
K Programm durch Tastendruck beenden Allgemeine Java-Themen 4
H Programmerweiterung durch Datei die Funktionen enthält Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben