2014-12-04 6 views
3

У меня странная проблема с библиотекой JMagick. Я использую Debian, поэтому я установил libjmagick6-Java и libjmagick6-JNI, и вот шаги, которые я сделал:Не удается получить JMagick

  • Я скопированные jmagick-6.6.9.jar от /usr/share/java/ до $JAVA_HOME/jre/lib/ext/.
  • Я поставил /usr/lib/jni (где libJMagick.so) в качестве родного места библиотеки в:
      библиотека
    • JRE System (в затмении)
    • jmagick-6.6.9.jar (в затмении)

Также я тестировал JMagick в простом Java-проекте и там он работает, но во втором проекте, который работает в веб-приложении Tomcat 6, он просто не работает.

Вот мой код, который РАБОТЫ - так jmagick должен быть установлен правильно:

public class Main { 
    public static void main(String[] arg) { 
     MagickImage image = null; 
     ImageInfo imageInfo = null; 

     try { 
      imageInfo = new ImageInfo("/home/firzen/IMG_0120.JPG"); 
      image = new MagickImage(imageInfo); 
      System.out.println(image.getDimension().width); 
     } catch (MagickException e) { 
       System.out.println(e); 
     } 
     image.destroyImages(); 
    } 
} 

А вот код в веб-приложение, которое является НЕ РАБОТАЮ:

public void init() {   
    ServletContext sc = getServletContext(); 
    cacheHandlers = (Map<String, CacheContext>) sc.getAttribute("handlers"); 
    Boolean applicationReady = (Boolean) sc.getAttribute("ready"); 
    isReady = cacheHandlers != null && Boolean.TRUE.equals(applicationReady); 

    System.out.println("zde"); 
    MagickImage image = null; 
    ImageInfo imageInfo = null; 

    try { 
     imageInfo = new ImageInfo("/home/firzen/IMG_0120.JPG"); 
     image = new MagickImage(imageInfo); 
     System.out.println(image.getDimension().width); 
    } catch (MagickException e) { 
      System.out.println(e); 
    } 
    image.destroyImages(); 
} 

Наконец вот исключение брошенный указанным кодом:

java.lang.UnsatisfiedLinkError: no JMagick in java.library.path 
    at java.lang.ClassLoader.loadLibrary(Unknown Source) 
    at java.lang.Runtime.loadLibrary0(Unknown Source) 
    at java.lang.System.loadLibrary(Unknown Source) 
    at magick.Magick.<clinit>(Magick.java:18) 
    at cz.bach.mrimage.MrImageSrv.init(MrImageSrv.java:44) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

Пожалуйста, расскажите мне, как решить эту проблему lem .. Спасибо заранее!

ответ

5

я, наконец, решить эту проблему путем проверки реального java.library.path с:

System.out.println("java.library.path is: " + System.getProperty("java.library.path")); 

Это дало мне этот беспорядок:

java.library.path is: /opt/jdk1.7.0_45/jre/lib/i386/server:/opt/jdk1.7.0_45/jre/lib/i386:/opt/jdk1.7.0_45/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386::/usr/java/packages/lib/i386:/lib:/usr/lib 

В конце концов, вы можете увидеть/USR/lib, поэтому я создал ссылку на libJMagick.so в/usr/lib:

ln -s /usr/lib/jni/libJMagick.so /usr/lib/libJMagick.so 

Наслаждайтесь! :-)

+1

Хороший план, не работает. Я сделал это на 5 предыдущих установках, и он будет случайным образом останавливать обнаружение собственной библиотеки время от времени. 'libJMagick.so' абсолютно находится в' java.library.path' и так зависит от него, но я получаю 'UnsatisfiedLinkError', когда он пытается загрузить класс. – coladict

Смежные вопросы