私は大きなアプリケーションを実行していて、その一部にJava 3Dが含まれています。問題は、多くのユーザーがコードを使用する必要があることですが、アプリケーションを実行するためだけにJava3Dをインストールするのは現実的ではありません。アプリケーションのそのセクションを使用することさえあります。
追加のjarをコンパイルしたり、いくつかのパスを変更したりして、システムにインストールせずにプロジェクトにJava 3Dを含めることは可能ですか?または、手動でdllを含めることはできますか?
java3dのデモは、それが可能であることを証明しています。必要なjarファイルのみをプロジェクトディストリビューションに含める必要があります。
はい、可能です。java3dサイトから必要なjarとネイティブライブラリをプルする必要があります。java3dデモからそれらを引き出しましたが、それにはxml起動記述子ファイルを掘り下げる必要があります。
最も問題が発生するのは、.so/.dllファイルにリンクするときです。これは通常、アプリが起動する前にクラスパスで指定されますが、アプリが起動するまで使用しているプラットフォームがわからないため、catch22です。
考えられる解決策は2つあります。1。プラットフォームを検出し、実際のアプリケーション用に新しいjvm(適切なライブラリを指定)をセットアップする単純なクラスを使用してプログラムをブートストラップします。2.ライブラリを動的にロードします(ネイティブ実装にこのメソッドを実際に使用したことはありませんが、それが不可能な理由はわかりません)。
残念ながら、どちらの方法も非常に簡単です。
クラスパスにjarを追加し、Javaを実行している.batファイルが開始された「作業」ディレクトリに適切なdllをドロップするだけで、問題なくこれを実行できました(そして、多くのユーザーがWindows OSで動作することをテストしました)。1つの落とし穴は、2つのbatファイル(1つは32ビット、もう1つは64ビット)が必要だったことです。実行しているJavaのバージョン(32/64ビット)に応じて異なるjarが必要になるため、各batファイルは適切なdllをj3dcore-ogl.dllにコピー/名前変更します。
.batファイルの例:
del j3dcore-ogl.dll copy j3dcore-ogl-64.dll j3dcore-ogl.dll java -Xmx2048m -classpath ./YourJar.jar;./lib/tinylaf.jar;./lib/j3dcore.jar;./lib/ j3dutils.jar; ./ lib / vecmath.jar your.package.MainClass @pause