blob: ad40a92fe5474f7ce2b3f7eddb543fd250e72a50 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0, which is available at
http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary
Licenses when the conditions for such availability set forth in the
Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
version 2 with the GNU Classpath Exception, which is available at
https://www.gnu.org/software/classpath/license.html.
SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-->
<!DOCTYPE chapter [<!ENTITY % ents SYSTEM "jersey.ent"> %ents;]>
<chapter xmlns="http://docbook.org/ns/docbook"
version="5.0"
xml:lang="en"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd
http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd"
xml:id="modules-and-dependencies">
<title>Modules and dependencies</title>
<section>
<title>Java SE Compatibility</title>
<para>
<emphasis>2.x branch: </emphasis>
<itemizedlist>
<listitem>
<para>Until version 2.6, Jersey was compiled with Java SE 6. This has changed in Jersey 2.7.</para>
</listitem>
<listitem>
<para>Up to version 2.25.x almost all Jersey components are compiled with Java SE 7 target.
It means, that you will need at least Java
SE 7 to be able to compile and run your application that is using latest Jersey.
Only <literal>core-common</literal> and <literal>core-client</literal> modules are still compiled with Java class
version runnable with Java SE 6.</para>
</listitem>
<listitem>
<para>Since Jersey 2.26, all modules are build using Java SE 8 and there is no support for running it
on older Java SE distributions.</para>
</listitem>
<listitem>
<para>Since Jersey 2.29, all modules can be built using Java SE 11 and all distributed modules provide support
for Java SE 8+ (9,11).</para>
</listitem>
</itemizedlist>
</para>
</section>
<section>
<title>Introduction to Jersey dependencies</title>
<para>
Jersey is built, assembled and installed using <link xlink:href="http://maven.apache.org/">Apache Maven</link>.
Non-snapshot Jersey releases are deployed to the
<link xlink:href="https://search.maven.org/">Central Maven Repository</link>. Jersey is also being deployed to
<link xlink:href="https://oss.sonatype.org/">Sonatype Maven repositories</link>, which contain also Jersey SNAPSHOT
versions. In case you would want to test the latest development builds check out the
<link xlink:href="https://oss.sonatype.org/content/repositories/snapshots/org/glassfish/jersey">
Sonatype Snapshots Maven repository</link>.
</para>
<para>
An application that uses Jersey and depends on Jersey modules is in turn required to also include in the application
dependencies the set of 3rd party modules that Jersey modules depend on. Jersey is designed as a pluggable component
architecture and different applications can therefore require different sets of Jersey modules. This also means that
the set of external Jersey dependencies required to be included in the application dependencies may vary in each
application based on the Jersey modules that are being used by the application.
</para>
<para>
Developers using Maven or a Maven-aware build system in their projects are likely to find it easier to include and
manage dependencies of their applications compared to developers using ant or other build systems that are not
compatible with Maven. This document will explain to both maven and non-maven developers how to depend on
Jersey modules in their application. Ant developers are likely to find the
<link xlink:href="http://maven.apache.org/ant-tasks/index.html">Ant Tasks for Maven</link> very useful.
</para>
</section>
<section xml:id="dependencies">
<title>Common Jersey Use Cases</title>
<section xml:id="servlet-app-glassfish">
<title>Servlet based application on Glassfish</title>
<para>If you are using Glassfish application server, you don't need to package
anything with your application, everything is already included. You just need to declare
(provided) dependency on JAX-RS API to be able to compile your application.
</para>
<programlisting language="xml">&lt;dependency&gt;
&lt;groupId>jakarta.ws.rs&lt;/groupId&gt;
&lt;artifactId>jakarta.ws.rs-api&lt;/artifactId&gt;
&lt;version&gt;&jax-rs-api-jar.version;&lt;/version&gt;
&lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;</programlisting>
<para>If you are using any Jersey specific feature, you will need to depend on Jersey directly.</para>
<programlisting language="xml">&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;artifactId&gt;jersey-container-servlet&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;
&lt;!-- if you are using Jersey client specific features without the server side --&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt;
&lt;artifactId&gt;jersey-client&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;
</programlisting>
</section>
<section xml:id="servlet-app-general">
<title>Servlet based server-side application</title>
<para>Following dependencies apply to application server (servlet containers) without any
integrated JAX-RS implementation. Then application needs to include JAX-RS API and Jersey
implementation in deployed application.</para>
<programlisting language="xml">&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" --&gt;
&lt;artifactId&gt;jersey-container-servlet&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;!-- Required only when you are using JAX-RS Client --&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt;
&lt;artifactId&gt;jersey-client&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;</programlisting>
</section>
<section xml:id="client-jdk">
<title>Client application on JDK</title>
<para>Applications running on plain JDK using only client part of JAX-RS specification need
to depend only on client. There are various additional modules which can be added, like
for example grizzly or apache or jetty connector (see dependencies snipped below). Jersey client
runs by default with plain JDK (using HttpUrlConnection). See <xref linkend="client"/>.
for more details.
</para>
<programlisting language="xml">&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt;
&lt;artifactId&gt;jersey-client&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
</programlisting>
<para>Currently available connectors:</para>
<programlisting language="xml">&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.connectors&lt;/groupId&gt;
&lt;artifactId&gt;jersey-grizzly-connector&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.connectors&lt;/groupId&gt;
&lt;artifactId&gt;jersey-apache-connector&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.connectors&lt;/groupId&gt;
&lt;artifactId&gt;jersey-jetty-connector&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;</programlisting>
</section>
<section xml:id="server-jdk">
<title>Server-side application on supported containers</title>
<para>Apart for a standard JAX-RS Servlet-based deployment that works with any Servlet container that
supports Servlet 2.5 and higher,
Jersey provides support for programmatic deployment to the following containers: Grizzly 2 (HTTP and Servlet),
JDK Http server, Simple Http server and Jetty Http server. This chapter presents only required maven dependencies,
more information can be found in <xref linkend="deployment"/>.
</para>
<programlisting language="xml">&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;artifactId&gt;jersey-container-grizzly2-http&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;artifactId&gt;jersey-container-grizzly2-servlet&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;artifactId&gt;jersey-container-jdk-http&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;artifactId&gt;jersey-container-simple-http&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;artifactId&gt;jersey-container-jetty-http&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.jersey.containers&lt;/groupId&gt;
&lt;artifactId&gt;jersey-container-jetty-servlet&lt;/artifactId&gt;
&lt;version&gt;&version;&lt;/version&gt;
&lt;/dependency&gt;</programlisting>
</section>
</section>
<xi:include href="modules.xml" />
</chapter>