Как правильно настроить клиентские зависимости jaxrs?

#java #api #maven #dependencies #jax-rs

#java #API #maven #зависимости #jax-rs

Вопрос:

Я пытаюсь использовать jax-rs 2.0 для существующего клиентского кода Java (java 8), ранее он не поддерживал maven (и я не хотел использовать maven или любые подобные фреймворки), но «клиенту» jax-rs требовалась зависимость для org.glassfish.jersy.client, поэтому я вышел и прочитал о зависимостях в целом и фреймворках, с которыми я новичок.

добавил фреймворк maven в мой проект и отредактировал pom.xml файл для зависимостей :

 <project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>CVT Sale Data Manager</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersy.bundles</groupId>
            <artifactId>jaxrs-ri</artifactId>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersy.media</groupId>
            <artifactId>jersy-media-moxy</artifactId>
        </dependency>
    </dependencies>



</project>
  

и это часть кода restapi:

 package api;

import javax.ws.rs.client.*;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;

public class RestApi {

    private static Client client;
    private static WebTarget baseTarget;            //base url

    public RestApi()
    {
        //changed on the server
        ClientBuilder.newBuilder().build();
        client = ClientBuilder.newClient();


        baseTarget = client.target("http://127.0.0.1:8000/api");
        client = ClientBuilder.newClient();
    }
  

почему-то я все еще получаю ту же ошибку:

 java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder
    at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:86)
    at api.RestApi.<init>(RestApi.java:27)
    at Launcher.initSingeltons(Launcher.java:36)
    at Launcher.main(Launcher.java:29)
    ... 11 more
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at javax.ws.rs.client.FactoryFinder.newInstance(FactoryFinder.java:87)
    at javax.ws.rs.client.FactoryFinder.find(FactoryFinder.java:185)
    at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:70)
    ... 14 more
Exception running application Launcher
  

Я очень новичок в таких зависимостях, поэтому вполне возможно, что у меня очень очевидная ошибка, о которой я не знаю, заранее приношу извинения, если это так.

Комментарии:

1. Как вы запускаете свою программу? Вы уверены, что зависимости находятся на пути к классу?

2. я запускаю программу из команды запуска Intellij, я не уверен, что такое путь к классу. существует pom.xml файл, который, как я предполагаю, будет обрабатывать пути?

3. Вместо ClientBuilder попробуйте использовать JerseyClientBuilder и посмотрите, компилируется ли он

4. @PaulSamsotha JerseyClientBuilder, похоже, не существует в javax, должен ли я использовать другую конкретную библиотеку вместо этого? ссылки на него были бы весьма признательны.

5. Скопируйте и вставьте эту зависимость и обновите свой проект, чтобы принудительно загрузить зависимость. Как это работает, так это то, что существует центральное хранилище для jar (зависимостей), и вы объявляете их в pom.xml , и они будут загружены (если еще не в вашем локальном репозитории). Если он уже находится в вашем локальном репозитории, он получает зависимость оттуда. Ваш локальный репозиторий находится в ${HOME}/.m2/repository. Краткое описание того, как это работает.