私はSWTの初心者で、JavaとEclipse全般にさびています。私は考え方を回復するための簡単なアプリを書いています(それは実際には私の孫娘のための算術事実クイズプログラムです)。cocoa / osx/x86_64プラットフォームにSWTを使用しています。最終的な目標は、アプリをOSX.appバンドルにパッケージ化することです。
ここで私は落ちて立ち上がれません:Eclipse IDE内から実行すると正常に動作し、Javaコマンドラインを使用してインタラクティブなbashシェルからスタンドアロンで実行すると正常に動作しますが、から実行するとNoClassDefFoundError例外がスローされますシェルスクリプト内。問題のスクリプトは、可能な限り単純です。
#!/bin/sh
exec java \
-d64 \
-XstartOnFirstThread \
-jar MathDrill.jar
スタックトレースは次のとおりです。
Exception in thread "main" java.lang.NoClassDefFoundError:
Caused by: java.lang.ClassNotFoundException:
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
私はすべてを1つのjarファイルにまとめました。jarにはswt.jar(プラットフォームの* .jnilibファイルが含まれています)と一連のバインディングフレームワークjar(うわー、それは苦痛でしたが、私は逸脱します)。私はもう試した:
a)Eclipseの「実行可能なjarへのエクスポート」ファイルを使用してマニフェストを作成します。
b)「exportto jar」を使用してマニフェストを作成します(これにより、マニフェストに「Rsrc-Main-Class」行が追加されるため、実際の違いはわかりません)。
c)囲まれたjarをライブラリディレクトリに抽出し、シェルスクリプトを変更して-classpath。:。/ libdirを追加することにより、実行可能なjarを作成します。
問題のマニフェストは、生成されたjarからMETA-INFを抽出した後です。
Manifest-Version: 1.0
Rsrc-Class-Path: ./ swing2swt.jar org.eclipse.core.databinding_1.4.1.v
20120521-2329.jar org.eclipse.core.databinding.beans_1.2.200.v2012052
3-1955.jar org.eclipse.core.databinding.observable_1.4.1.v20120521-23
29.jar org.eclipse.core.databinding.property_1.4.100.v20120523-1955.j
ar org.eclipse.jface.databinding_1.6.0.v20120521-2329.jar org.eclipse
.equinox.common_3.6.100.v20120522-1841.jar com.ibm.icu_4.4.2.v2011082
3.jar swt.jar
Ant-Version: Apache Ant 1.8.3
Class-Path: .
Created-By: 1.6.0_37-b06-434-10M3909 (Apple Inc.)
Rsrc-Main-Class: com.rutabaga.mathdrill.MathDrill
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
いくつかの質問:
1)マニフェストは、「jar xf MathDrill.jar META-INF」コマンドの後に、変な80列のワードラップとスペースで表示されます。これは正常ですか?それは確かにそれを構築したアリのタグではそうではありません。
2)マニフェストのClass-PathとRsrc-Class-Pathの違いは何ですか?
3)Eclipseで(実行可能なjarではなく)jarにエクスポートすると、「jar-in-jar-loader.zip」ファイルが生成されます。これは何ですか?どうやって使うの?
4)起動するためのスクリプトを使用せずに、OS Xバンドルから直接Javaを実行する方法はありますか?http://www.eclipse.org/swt/macosx/で見つけた指示に従ってみました。また、どちらの場合も同じクラスローダー例外であるPlatypusを使用してみました。
5)シェルスクリプトからJavaを実行すると、環境に何か奇妙なことが起こりますか?
どんな助けでも大歓迎です。私は何か愚かなことをしたと確信していますが、私は今のところ水中でちょっと死んでいます。