Ich arbeite gerade an einem Play 2.1-Projekt, bei dem Anfragen an den Web-Service das Herunterladen von vom Benutzer bereitgestellten Bildern, Größenanpassungen und Sie können sie erneut zuschneiden und bekannte fehlerhafte Fotos herausfiltern (zum Beispiel möchten wir nicht, dass Benutzer Firmenlogos hochladen). Wir versuchen, OpenCV zu verwenden, um die Back-End-Arbeit zu behandeln, aber ich kann nicht scheinen, dass IntelliJ das OpenCV-Jar in einer Weise hinzufügt, die mit dem Java-Projekt funktioniert.IntelliJ findet keine nativen Bibliotheken für OpenCV, wenn Sie jar als Abhängigkeit für Play-Projekt hinzufügen
Ich war in der Lage, OpenCV von der Quelle ohne Problem zu bauen. Dies ließ mich mit dem folgenden Ordner: /home/charles/opencv/Release
In diesem Ordner, ich habe drei Dateien von Interesse:
- sind/opencv-246.jar
- lib/cv2.so
- lib/libopencv_java246.so
Wenn ich versuche, die jAR-Datei zu IntelliJ als eine neue Java-Bibliothek hinzufügen, findet er scheinbar alle Klassen/Methoden, und ich kann Code mit dem aut schreiben o-vollständig. Ich kann auch auf die entsprechenden Klassen oder Methoden klicken und es bringt mich zu den richtigen Dateien.
aber wenn ich versuche, das Play-Projekt auszuführen, ich diesen Fehler:
[info] Loading project definition from /home/charles/Github/ImageProject
[info] Set current project to ImageProject (in build file:/home/charles/Github/ImageProject/)
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
Server started, use Alt+D to stop
[info] Compiling 1 Java source to /home/charles/Github/ImageProject/target/scala-2.10/classes...
[error] /home/charles/Github/ImageProject/app/controllers/Application.java:7: error: package org.opencv.core does not exist
[error] import org.opencv.core.Core;
[error] ^
Ich habe auch versucht, eine Kopie der JAR-Datei hinzugefügt direkt in das Projekt (so setzt opencv-246. jar in ImageProject/lib) und fügt dann stattdessen die Java-Bibliothek von diesem Ort hinzu. Aber das läßt mich nur mit einem anderen Fehler:
java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
Ich vermute, dass ein Teil des Problems auf die nativen Bibliotheken in Beziehung gesetzt werden kann, dass die Java OpenCV-Wrapper verwendet (Datei 2 oder 3 oben). Wenn Sie in Eclipse eine JAR-Datei hinzufügen, können Sie den Speicherort der systemeigenen Bibliothek explizit festlegen, wodurch OpenCV funktioniert. Ich habe Vorschläge zur Verwendung dieses lesen, das Problem zu beheben:
-Djava.library.path=/home/charles/opencv/release/lib
Aber das scheint nicht zu funktionieren (wenn auch vielleicht bin ich es an der falschen Stelle Einstellung Ich habe versucht, es als eine JVM Einstellung? Parameter in der Run-Konfiguration für das Projekt und in den IDE-Einstellungen, aber keiner scheint verwendet oder respektiert zu werden).
Hinweis: Nur zur Verdeutlichung, dies ist ein Play2-Projekt, kein Android-Projekt. Es scheint eine gewisse Android-spezifische Hilfe zu geben, die in diesem Fall nicht relevant ist.
Das fühlt sich an, als ob es eine ziemlich geradlinige Sache sein sollte, aber ich habe mehrere Tage damit verbracht, eine Antwort zu finden, und habe immer noch nichts. Irgendwelche Ideen?
Weitere Details: Ich habe auch versucht, im Anschluss an die "Running SBT-Proben" der OpenCV-Dokumentation hier: http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html
Und ich bekomme auch einen ähnlichen Fehler:
[email protected]:~/JavaSample$ sbt run
[info] Loading project definition from /home/charles/JavaSample/project
[info] Set current project to JavaSample (in build file:/home/charles/JavaSample/)
[info] Compiling 1 Java source to /home/charles/JavaSample/target/scala-2.10/classes...
[info] Running HelloOpenCV
Hello, OpenCV
[error] (run-main) java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at HelloOpenCV.main(HelloOpenCV.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
[trace] Stack trace suppressed: run last compile:run for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) Nonzero exit code: 1
[error] Total time: 2 s, completed Jul 17, 2013 5:11:39 PM
Das [Fehler] /home/charles/Github/ImageProject/app/controllers/Application.java:7: Fehler: Paket org.opencv.core existiert nicht, schlägt mich als ein Java cp Problem eher als ein natives lib-Problem. Ich denke, Ihre SBT ist nicht richtig konfiguriert. – morpheus05
Haben Sie ein Beispiel dafür, wie die SBT in diesem Fall konfiguriert werden soll? –
Siehe meine Antwort auf http://stackoverflow.com/questions/24856501/how-do-you-link-a-native-library-to-a-jar-in-intellij/37038583#37038583 die native Bibliothek ist in der Regel ein Laufzeitabhängigkeit und so müssen Sie angeben, wie die VM es zur Laufzeit findet, nicht IntelliJ zur Kompilierzeit. –