2017-04-20 16 views
0

OSGiでJavaプロジェクトを移植しようとしています。このプロジェクトは、サードパーティのJAR(librealsense JavaCPP presets)によって異なります。私は開発のためにEclipseを使用しています。OSGi APIバージョンミスマッチ例外の問題

私は必要なもののサブセットを使用して構成をテストし、悲惨に失敗しました。 私がテストに使用したコードは以下の通りです:

package testinglibrariesplugin; 

import org.bytedeco.javacpp.RealSense.*; 
import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 

public class Activator implements BundleActivator { 

    public void start(BundleContext context) throws Exception { 
     System.out.println("Hello World!!"); 

     try { 
      context context1 = new context(); 
      device device = context1.get_device(0); 

      String devName = device.get_name().getString(); 

      System.out.println(devName); 
     } catch(Exception e) { 
      System.out.println(e); 
     } 
    } 

    public void stop(BundleContext context) throws Exception { 
     System.out.println("Goodbye World!!"); 
    } 

} 

でManifest.mf:

... 
Bundle-ClassPath: src/bundletesting/ffmpeg-linux-x86_64.jar, 
src/bundletesting/ffmpeg-linux-x86.jar, 
src/bundletesting/ffmpeg-platform.jar, 
src/bundletesting/ffmpeg.jar, 
src/bundletesting/javacpp.jar, 
src/bundletesting/javacv.jar, 
src/bundletesting/librealsense-linux-x86_64.jar, 
src/bundletesting/librealsense-linux-x86.jar, 
src/bundletesting/librealsense-platform.jar, 
src/bundletesting/librealsense.jar, 
src/bundletesting/opencv-linux-x86_64.jar, 
src/bundletesting/opencv-linux-x86.jar, 
src/bundletesting/opencv-platform.jar, 
src/bundletesting/opencv.jar, 
. 

build.properties:

source.. = src/ 
output.. = bin/ 
bin.includes = META-INF/,\ 
       .,\ 
       src/bundletesting/ffmpeg-linux-x86_64.jar,\ 
       src/bundletesting/ffmpeg-linux-x86.jar,\ 
       src/bundletesting/ffmpeg-platform.jar,\ 
       src/bundletesting/ffmpeg.jar,\ 
       src/bundletesting/javacpp.jar,\ 
       src/bundletesting/javacv.jar,\ 
       src/bundletesting/librealsense-linux-x86_64.jar,\ 
       src/bundletesting/librealsense-linux-x86.jar,\ 
       src/bundletesting/librealsense-platform.jar,\ 
       src/bundletesting/librealsense.jar,\ 
       src/bundletesting/opencv-linux-x86_64.jar,\ 
       src/bundletesting/opencv-linux-x86.jar,\ 
       src/bundletesting/opencv-platform.jar,\ 
       src/bundletesting/opencv.jar 

私がしている使用してきたjarファイルダウンロード可能なfrom my Github repo

私は次のエラーを取得する:

Hello World!! 
java.lang.RuntimeException: API version mismatch: librealsense.so was compiled with API version 1.12.1 but the application was compiled with 1.9.6! Make sure correct version of the library is installed (make install) 

コードはJavaだけを使用して動作するので、私は、Eclipse/OSGiの中の設定に問題があると仮定しなければなりません。私はこのAPIの不一致を無視したいと思いますが、私はこの環境で実際に経験していないので、進める方法がわかりません。これが問題を解決する正しい方法でない場合は教えてください。

何か助けていただければ幸いです。

EDIT:これは私が単純なJavaアプリケーションで使用したコードであり、それは動作します:

import org.bytedeco.javacpp.RealSense.*; 

public class Main { 

    public static void main(String[] args) { 

     context context = new context(); 
     device device = context.get_device(0); 

     String devName = device.get_name().getString(); 

     System.out.println(devName); 

    } 

} 

出力:Intel RealSense SR300予想通り。

EDIT 2:私は、エラーがこのlibに文句を言っている

+0

この問題はOSGiに関連していますか?プレーンなJavaアプリケーションの単純なメインメソッドからコードを実行するとどうなりますか? –

+0

私は試して、それは完璧に動作します... – mattdibi

+0

両方の場合に同じapiの依存関係を使いましたか? –

答えて

0

私のbuild.propertiesとマニフェストファイルを追加しました:

librealsense.so was compiled with API version 1.12.1 but the application was compiled with 1.9.6! 

彼らはただ削除するのを忘れない限り、Javaのように見えるしません。名前から.so

とにかく、エラーは、アプリケーションが間違ったバージョンに対してコンパイルされたことを言及し、これは(特に、あなたのアプリケーションバンドルにjarファイルを埋め込んだ考慮して)実行時のOSGiエラーではありません。実行時に存在するバージョンが1.12.1である場合、ライブラリの1.9.6バージョンからのコードを参照しているように見えるのは、クラスのバイトコードです。

あなたが適切なビルドシステムを使用しているように見えるしていないように、それは(あなたがソース管理で瓶を持っている!)(あなたが持っているそれぞれの瓶を検査せずに)診断するのは難しいです。

実行時にOSGiに与えたのと同じコンパイルステップが含まれていることを確認することをお勧めします。この問題は解決しなくてはなりません。

+0

私はまったく同じ瓶を使用していると確信しています。私は最近、JavaCPPプロジェクトのmantainersに連絡を取り、彼らはそれらのインタフェースjarファイルを生成するためにライブラリの1.9.6バージョンを使用していると私に言った。私はこれが問題だと思う。私のマシンでは、明らかに私は1.12.1バージョンのライブラリがインストールされており、例外が発生します。プレーンなJavaのバージョンは壊れていないので、バージョンの互換性に関するいくつかのより厳しい規則を持つOSGiフレームワークでなければならないと私は結論づけました... – mattdibi

関連する問題