Je suis coincé avec la création d'un projet Gradle pour un service Web RESTful en utilisant la bibliothèque de maillots. La configuration du projet doit être capable de lancer le service à l'intérieur d'un serveur d'applications de jetée. J'ai déjà trouvé une ressource: https://github.com/ziroby/jetty-gradle-hello-world
Mon problème avec cette solution est qu'elle utilise une version obsolète du maillot. J'ai besoin d'au moins la version 2 (la dernière version 2.14 préférée). J'ai essayé de rechercher de nouvelles versions sur maven central, mais dans la version 2, beaucoup de noms d'artefacts ont changé et je ne suis pas en mesure de le configurer correctement.
Edit: je n'ai pas spécifiquement besoin d'un serveur de jetée dans mon projet. Il peut s'agir de n'importe quel serveur d'applications, ce qui convient pour tester et déboguer mon application. J'utilise Jetty également en production, donc ce serait bien d'utiliser Jetty.
[~ # ~] modifier [~ # ~] : (par peeskillet) - Code du lien
construire
apply plugin: 'Java'
apply plugin: 'jetty'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
testCompile 'org.hamcrest:hamcrest-all:1.3'
testCompile 'com.Sun.jersey:jersey-client:1.17.1'
testCompile 'com.Sun.jersey:jersey-core:1.17.1'
compile 'com.Sun.jersey:jersey-core:1.17.1'
compile 'com.Sun.jersey:jersey-server:1.17.1'
compile 'com.Sun.jersey:jersey-servlet:1.17.1'
}
test {
exclude '**/*IntegrationTest*'
}
task integrationTest(type: Test) {
include '**/*IntegrationTest*'
doFirst {
jettyRun.httpPort = 8080 // Port for test
jettyRun.daemon = true
jettyRun.execute()
}
doLast {
jettyStop.stopPort = 8091 // Port for stop signal
jettyStop.stopKey = 'stopKey'
jettyStop.execute()
}
}
Tester
public class HelloIntegrationTest {
private static String HELLO_URL = "http://localhost:8080/hello";
@Test
public void testHello() throws Exception {
Client client = Client.create();
WebResource webResource = client.resource(HELLO_URL);
String response = webResource.get(String.class);
assertThat(response, is("Hello, World!"));
}
}
Ressource
@Path("/hello")
public class HelloWebapp {
private static HelloWorldService helloWorldService = new HelloWorldService();
@GET()
public String hello() {
return helloWorldService.sayHello();
}
}
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://Java.Sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Jetty Gradle Hello World</display-name>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>com.ziroby.hello.webapp</param-value>
</init-param>
<!-- <init-param> -->
<!-- <param-name>com.Sun.jersey.api.json.POJOMappingFeature</param-name> -->
<!-- <param-value>true</param-value> -->
<!-- </init-param> -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Débarrassez-vous de toutes les dépendances de Jersey que vous avez actuellement
dependencies {
testCompile 'junit:junit:4.11'
testCompile 'org.hamcrest:hamcrest-all:1.3'
+------------- ======= JUNK ======= ----------------+
| testCompile 'com.Sun.jersey:jersey-client:1.17.1' |
| compile 'com.Sun.jersey:jersey-core:1.17.1' |
| compile 'com.Sun.jersey:jersey-server:1.17.1' |
| compile 'com.Sun.jersey:jersey-servlet:1.17.1' |
+---------------------------------------------------+
}
Ci-dessous est le seulement seul dont vous avez besoin pour obtenir les fonctionnalités de base
dependencies {
testCompile 'junit:junit:4.11'
testCompile 'org.hamcrest:hamcrest-all:1.3'
+-------------------- ========= GOLDEN ======== -------------------------+
| compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.14'|
+------------------------------------------------------------------------+
/* UPDATE */
/* Starting Jersey version 2.26, you will also need the following */
/* compile 'org.glassfish.jersey.inject:jersey-hk2:2.26' */
}
web.xml
<web-app>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.ziroby.hello.webapp</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Tester
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Test;
public class HelloIntegrationTest {
private static String HELLO_URL = "http://localhost:8080/hello";
@Test
public void testHello() throws Exception {
Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target(HELLO_URL);
String response = webTarget.request().get(String.class);
System.out.println(response);
assertThat(response, is("Hello, World!"));
}
}
Cela a été testé avec un clone du projet lié. Seuls les changements sont indiqués ci-dessus.
Autres ressources:
Pour l'utilisation du support JSON
org.glassfish.jersey.media:jersey-media-json-jackson:2.14
Aucune configuration supplémentaire n'est requise pour que cela fonctionne.