#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. Краткое описание того, как это работает.