You can use any Java compatible libraries with the Java runtime on the
App Engine standard environment.

These instructions use Apache Maven to build, run, and deploy a sample app.

For details about installing Maven, see
[Using Apache Maven and the App Engine plugin](https://docs.cloud.google.com/appengine/docs/standard/java/using-maven).

## Declare and manage dependencies

To manage dependencies using Maven, you need to specify the dependencies in
the `<dependencies>` section inside the
[`pom.xml`](http://maven.apache.org/guides/introduction/introduction-to-the-pom.html)
file of your project.

To manage your project's dependency on Maven itself, you can use the
[Maven Wrapper](https://maven.apache.org/wrapper/). If you do not use the
Maven Wrapper, App Engine defaults to using a recent version of Maven
when running [`gcloud app deploy`](https://docs.cloud.google.com/sdk/gcloud/reference/app/deploy).

### Private dependencies with Artifact Registry

If you need to host private dependencies for your Java app, you can use an
[Artifact Registry Maven repository](https://docs.cloud.google.com/artifact-registry/docs/java/store-java).
Connecting to a Maven repository hosted on Artifact Registry requires the
[Artifact Registry Maven Tools](https://github.com/GoogleCloudPlatform/artifact-registry-maven-tools)
plugin for your Maven or Gradle configuration.

## Specify the Java servlet library

Eclipse Jetty and Tomcat apps require the Java servlet library. Specify it in
your `pom.xml` file's `<dependencies>` entry:


    <dependencies>

      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <type>jar</type>
        <scope>provided</scope>
      </dependency>

    </dependencies>

Note that frameworks such as [SparkJava](http://sparkjava.com/) or [Spring Boot](http://projects.spring.io/spring-boot/) won't require the servlet library.

<br />

## Use the Cloud Client Libraries

[Cloud Client Libraries for Java](https://github.com/googleapis/google-cloud-java)
provide idiomatic access to Google Cloud services. To use a library, declare
it as a dependency.

Typically, you only declare dependencies on the specific libraries that your app
needs. For example, to use the Cloud Storage library:


    <!--  Using libraries-bom to manage versions.
    See https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM -->
    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.28.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>

    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-storage</artifactId>
      </dependency>
    </dependencies>

You can configure the Cloud Client Libraries for Java to
[handle authentication automatically](https://docs.cloud.google.com/docs/authentication/client-libraries).