5

問題提示

JBoss-as インスタンスのグローバル モジュールとして OpenCV をインストールしようとしています。バージョンは次のとおりです。

  • JBoss-as: 7.1.1 最終版
  • OpenCV: 2.4.5 (Java サポート付きでコンパイル)

JBoss-as と OpenCV のみがインストールされた Ubuntu Server 12.04 64 ビットの新規インストールから始めました。

前文

OpenCV Java ラッパーは JNI 呼び出しを使用します。したがって、次の 2 つのことが必要です。

  • opencv-245.jar
  • libopencv_java245.so

で利用可能/usr/share/OpenCV/java/(インストールに関して)

また、いくつかの観察を指摘します。

  1. JBoss のインストールは正しい (アプリケーションはデプロイ可能で、機能している)
  2. Java をサポートする OpenCV のコンパイルとインストールが正しい (OpenCV を使用する Java クラスが動作している)
  3. OpenCV を使用し、Maven を使用して JBoss-as にデプロイされた基本的な Web アプリケーション ( はopencv-245.jar依存関係として にリストされているpom.xmlため、 にパッケージ化されていますwar)

問題の説明

OpenCV を JBoss グローバル モジュール ( <scope>provided</scope>pom.xml で設定) として定義するとすぐに、この例外が発生します。

java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat()J
    org.opencv.core.Mat.n_Mat(Native Method)
    org.opencv.core.Mat.<init>(Mat.java:441)
    WS.printMessage(WS.java:15)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:616)
    org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:155)
    org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257)
    org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222)
    org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211)
    org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525)
    org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502)
    org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119)
    org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

jarOpenCVライブラリから例外が発生したため、OpenCVライブラリが見つかったようです。また、次のように見つからないライブラリについても文句を言いません(最後の最初のリンクから取得):

java.lang.UnsatisfiedLinkError: no xxxx in java.library.path

したがって、それは問題ではないと思いlibopencv_java245.soます。正確な構成については、以下で説明します。

構成

org.opencvモジュールをmodules/org/opencv/main/module.xml次のように定義しました。

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.opencv">
    <resources>
        <resource-root path="opencv-245.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
    </dependencies>
</module>

次に、同じフォルダーとサブフォルダーにも入れますopencv-245.jarNative Libraryで説明されているように)libopencv_java245.solib/linux-x86_64/

このモジュールをグローバルとして定義するには、 で変更しましたstandalone/configuration/standalone.xml:

<subsystem xmlns="urn:jboss:domain:ee:1.0">
    <global-modules>
        <module name="org.opencv" slot="main"/>
    </global-modules>
</subsystem>

最後に、設定したグローバル モジュールを使用するにはsrc/main/webapp/WEB-INF/jboss-deployment-structure.xml:

<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.opencv" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

<scope>provided</scope>また、 mavenを入れたことを思い出しpom.xmlます。

また、置く:

System.loadLibrary("opencv_java245");

コードに含まれていなくても、何も変わりません。

余分な観察

また、 oneと oneearで構成されるアプリケーションでは、「序文」のポイント 3 で説明されている手順でさえ機能せず、上記と同じ例外が発生することにも気付きました。たぶん、この情報が役立つかもしれません。warjar

誰かがいくつかの指針や解決策を持っていますか?

関連する質問

4

3 に答える 3

1

以下の代わりに OpenCV (org.openpnp パッケージ) 3.4.2+ を使用している場合:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

あなたが使用することができます:

OpenCV.loadLocally();

私は jboss wildfly を使用していますが、複数のデプロイを行うときに問題がありました。ネイティブ クラスは既に読み込まれていましたが、これで問題は解決しました。

于 2019-06-08T16:05:32.343 に答える
0

libopencv_java245.so ファイルを、OpenCV モジュール用に作成した同じディレクトリに追加します。次に、それをリソースとして追加して、クラスパスに追加し、実行時に使用できるようにします。

したがって、module.xml は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.opencv">
    <resources>
        <resource-root path="opencv-245.jar"/>
        <resource-root path="."/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
    </dependencies>
</module>
于 2013-04-23T15:36:19.213 に答える