Maillot 2 client avec maven
Je veux créer simple Jersey 2 application Client avec Maven (Serveur d'application est également mis en œuvre et exécute).
Mon 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.client</groupId>
<artifactId>RestClient</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>RestClient</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.13</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
code java
package com.client;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import javax.ws.rs.client.Invocation.Builder;
public class App
{
public static void main( String[] args )
{
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080").path("simple-service-webapp/rest/myresource");
Builder builder = target.request();
//Response response = builder.get();
String result = builder.get(String.class);
System.out.println(target.getUri().toString());
System.out.println("Result=" + result);
}
}
- Je construire application par la commande mvn package et tout passer. Ensuite, je lance l'app par java -cp target/RestClient-1.0-SNAPSHOT.jar com.client.App et puis d'erreur se produit:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/ws/rs/client/ClientBuilder
at com.client.App.main(App.java:20)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.client.ClientBuilder
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 1 more
Il semble que les bibliothèques ne sont pas inclus, car les fichiers de l'arborescence de projeckt ressemble:
.
├── pom.xml
├── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── client
│ │ └── App.java
│ └── test
│ └── java
│ └── com
│ └── client
│ └── AppTest.java
└── target
├── classes
│ └── com
│ └── client
│ └── App.class
├── generated-sources
│ ├── annotations
│ └── test-annotations
├── maven-archiver
│ └── pom.properties
├── RestClient-1.0-SNAPSHOT.jar
├── surefire
├── surefire-reports
│ ├── com.client.AppTest.txt
│ └── TEST-com.client.AppTest.xml
└── test-classes
└── com
└── client
└── AppTest.class
Où ai-je erreur? Merci.
OriginalL'auteur jiri463 | 2014-11-30
Vous devez vous connecter pour publier un commentaire.
Vous devez copier les dépendances à partir de votre repo dans votre projet (ou de n'importe où, vraiment, partout où vous voulez -cp). Pour cela, vous pouvez utiliser le maven-dépendance-plugin. Il suffit d'ajouter ce pour les
<plugins>
Ce que le dessus de configuration du plugin va faire est de copier toutes les dépendances à
target/lib
.Le moyen le plus facile pour exécuter le bocal comme un fichier exécutable est de définir également la
Class-Path
dans leMANIFEST.MF
, par Maven. Pour cela, nous pouvons utiliser la maven-jar-plugin. Afin de l'ajouter à la<plugins>
Aussi, vous aurez besoin de se débarrasser de la
<scope>provided</scope>
pour le Maillot client de dépendance. Avec cette portée, Maven va pas ajouter les pots pour le classpath.Après avoir fait cela, vous pouvez simplement exécuter
java -jar your-jar.jar
, sans avoir besoin de pc-n'importe quoi, comme tous les pots sont spécifiés dans le Manifeste. Il devrait ressembler à quelque chose commeOriginalL'auteur Paul Samsotha
Vous avez marqué votre maillot de dépendance, comme prévu, par conséquent, il ne sera pas inclus dans la sortie, parce que quand la dépendance est fourni, il est supposé que c'est disponible dans l'environnement (par exemple par le serveur d'application).
Essayez de supprimer le
<scope>provided</scope>
de votre Maven de dépendance ou d'inclure le maillot jar dans le classpath à l'aide de la-cp
paramètre lorsque vous exécutez votre programme.OriginalL'auteur Bohuslav Burghardt
L'autre chose que vous pouvez faire est de l'emballage de vos dépendances dans un gros pot. Le maven-assembly-plugin va le faire automatiquement pour vous.
Vous pouvez créer une spécification de montage si vous avez besoin de quelque chose de plus sophistiqué que ce mode de base dans lequel toutes les dépendances sont inclus dans le pot.
Il y a aussi le maven-l'ombre d'un plugin, qui est aussi plus configurable.
Un autre outil utile est:
pour voir exactement ce que vos dépendances.
OriginalL'auteur natke