Java Windows 7 Pro x64で実行されるEclipseを備えた64ビットEclipseアプリケーションがあります。
クライアントRESTful APIアクセス用に Jersey バンドル、jaxrs-ri-2.7.Zipをダウンロードしました。
これらの外部jar(プロジェクト|ビルドパス|ビルドパスの構成... |ライブラリ)を追加しました。
jaxrs-ri/api/javax.ws.rs-api-2.0.jar
jaxrs-ri/lib/jersey-client.jar
jaxrs-ri/lib/jersey-common.jar
ソースは次のとおりです。
package prjTestJersey;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
public static void main(String[] args)
{
try
{
Client oClient = ClientBuilder.newClient();
oClient.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
最初の行であるClinet oClient ...をステップオーバーすると、次のエラーが表示されます。
Source not found.
エラーの原因と修正方法を教えてください。なぜ本当のエラーではなく「ソースが見つかりません」。
注:3つのjarファイルをプロジェクトのlibフォルダーにコピーしようとしましたが、うまくいきませんでした。 Eclipseデバッガーを使用しているので、デバッグビューでF11を押してから、回線上でF6を実行します。
更新:
まったく新しい32ビットアプリケーション(WindowBuilder SWTアプリケーションウィンドウ)を作成して、main(...)を更新するだけで、同じ問題が発生しました。つまり、問題はプラットフォームに依存しません。
更新2:
実行しようとする投稿された答えは悪い考えではありませんでした。 :-)それは私が追跡しなければならない別の手がかりを与えました。これがダンプです。
Exception in thread "main" Java.lang.NoClassDefFoundError: org/glassfish/hk2/utilities/binding/AbstractBinder
at org.glassfish.jersey.client.ClientConfig.<init>(ClientConfig.Java:452)
at org.glassfish.jersey.client.JerseyClientBuilder.<init>(JerseyClientBuilder.Java:94)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at Java.lang.reflect.Constructor.newInstance(Unknown Source)
at Java.lang.Class.newInstance(Unknown Source)
at javax.ws.rs.client.FactoryFinder.newInstance(FactoryFinder.Java:116)
at javax.ws.rs.client.FactoryFinder.find(FactoryFinder.Java:206)
at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.Java:86)
at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.Java:114)
at AppMain.main(AppMain.Java:20)
Caused by: Java.lang.ClassNotFoundException: org.glassfish.hk2.utilities.binding.AbstractBinder
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
... 12 more
最終回答:(助けてくれた両方の回答に感謝します。)
依存関係がありませんでした。必要なリストは次のとおりです。
swt_win32_x86.jar
api/javax.ws.rs-api-2.0.jar
ext/jersey-guava-2.7.jar
ext/hk2-api-2.2.0.jar
lib/jersey-common.jar
lib/jersey-client.jar
私の推測では、「ソースが見つかりません」は、Eclipseに添付された3つのjarのソースコードがないため、Client oClient = ClientBuilder.newClient();
にデバッグできないことを知らせるEclipseからのメッセージです。プログラムを(デバッグなしで)実行するだけで十分に機能する場合があります。 Eclipseのjarファイルにソースコードを追加する方法の詳細については、こちらを参照してください。 Eclipseにソースを添付する簡単な方法はありますか? 。
それでも機能しない場合は、ダウンロードしたバンドルのjarをallに追加して、依存関係が失われていないことを確認することをお勧めします。
クラスorg.glassfish.hk2.utilities.binding.AbstractBinderを含むhk2 API jarが欠落しています
Gradleユーザーのみ。
javax.ws.rs-api
およびjersey-client
の正しいバージョンは、クラスが見つからないという問題を解決します。
compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.1-m01'
compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.24.1'