Джерси ClientBuilder.newClient(): источник не найден

У меня есть Java-64-битное приложение Eclipse с Eclipse, работающим в Windows 7 Pro x64.

Я загрузил Jersey bundle, jaxrs-ri-2.7.zip, для доступа к клиенту RESTful API.

Я добавил эти внешние банки (Project | Build Path | Configure Build Path... | Libraries):

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 по строке.

UPDATE:

Я попытался создать совершенно новое 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

Ответы

Ответ 1

Я предполагаю, что "Source not found" просто является сообщением от Eclipse, в котором говорится, что он не может отлаживать Client oClient = ClientBuilder.newClient();, поскольку у вас нет исходного кода для трех банок, установленных в Eclipse. Если вы просто запускаете программу (без отладки), это может очень сработать. Подробнее о том, как добавить исходный код в jar файлы в Eclipse: Есть ли простой способ подключения источника в Eclipse?.

Если он все еще не работает, я бы предложил добавить all банки из загруженного вами пакета, чтобы убедиться, что вы не заметили какой-либо зависимости.

Ответ 3

Только для пользователей 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'