Before installing the API, make sure your development machine meets the system requirements.
An app built with ArcGIS Maps SDK for Java requires the following dependencies:
- The
arcgis-java
jar - jniLibs, resources, and required libraries
- OpenJFX 17 modules or OpenJFX 21 modules
There are three ways to get set up with the API:
- Gradle
- Maven
- Downloaded .zip file
Get the API with Gradle
The buildscript below shows how to get these dependencies using the Gradle build tool.
For a starter project using Gradle with instructions for Eclipse and IntelliJ, download or clone the java-gradle-starter-project on GitHub.
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.1.0'
id 'idea'
}
idea {
module {
downloadJavadoc = true
}
}
ext {
arcgisVersion = '200.5.0'
}
repositories {
mavenCentral()
maven {
url 'https://esri.jfrog.io/artifactory/arcgis'
}
}
configurations {
natives
}
dependencies {
implementation "com.esri.arcgisruntime:arcgis-java:$arcgisVersion"
natives "com.esri.arcgisruntime:arcgis-java-jnilibs:$arcgisVersion"
natives "com.esri.arcgisruntime:arcgis-java-resources:$arcgisVersion"
// handle SLF4J http://www.slf4j.org/codes.html#StaticLoggerBinder using a no-operation logger
implementation "org.slf4j:slf4j-nop:2.0.13"
}
javafx {
version = "21.0.3"
modules = [ 'javafx.controls', 'javafx.graphics', 'javafx.fxml', 'javafx.web', 'javafx.media' ]
}
task copyNatives(type: Copy) {
description = "Copies the arcgis native libraries into the .arcgis directory for development."
group = "build"
configurations.natives.asFileTree.each {
from(zipTree(it))
}
into "${System.properties.getProperty("user.home")}/.arcgis/$arcgisVersion"
}
run {
dependsOn copyNatives
}
The copyNatives task in this Gradle build script will automatically download and unpack the libraries into $USER_HOME/.arcgis directory. The API looks in this directory to find the required libraries.
Configure the libraries
For your app to run, the API must be able to find the API's required libraries. If you got the API using Gradle, the libraries have been downloaded to your user directory in the .arcgis folder. Since the API can automatically find the required libraries at this location, no further configuration is necessary.
Get the API with Maven
The pom file below shows how to get the required dependencies using the Maven build tool.
For a starter project using Maven with instructions for Eclipse and IntelliJ, download or clone the java-maven-starter-project on GitHub.
<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.mycompany</groupId>
<artifactId>app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Map App</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<arcgis.version>200.5.0</arcgis.version>
</properties>
<repositories>
<repository>
<id>arcgis</id>
<url>https://esri.jfrog.io/artifactory/arcgis</url>
</repository>
</repositories>
<dependencies>
<!--JavaFX dependencies -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>21.0.3</version>
</dependency>
<!--ArcGIS dependencies -->
<dependency>
<groupId>com.esri.arcgisruntime</groupId>
<artifactId>arcgis-java</artifactId>
<version>${arcgis.version}</version>
</dependency>
<dependency>
<groupId>com.esri.arcgisruntime</groupId>
<artifactId>arcgis-java-jnilibs</artifactId>
<version>${arcgis.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>com.esri.arcgisruntime</groupId>
<artifactId>arcgis-java-resources</artifactId>
<version>${arcgis.version}</version>
<type>zip</type>
</dependency>
<!--SLF4J dependencies-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>2.0.13</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.esri.arcgisruntime</groupId>
<artifactId>arcgis-java-jnilibs</artifactId>
<version>${arcgis.version}</version>
<type>zip</type>
<overWrite>false</overWrite>
<outputDirectory>${user.home}/.arcgis/${arcgis.version}</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.esri.arcgisruntime</groupId>
<artifactId>arcgis-java-resources</artifactId>
<version>${arcgis.version}</version>
<type>zip</type>
<overWrite>false</overWrite>
<outputDirectory>${user.home}/.arcgis/${arcgis.version}</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.mycompany.app.App</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>io.takari</groupId>
<artifactId>maven</artifactId>
<version>0.7.4</version>
</plugin>
</plugins>
</build>
</project>
Run the Maven dependency:unpack goal. This will unpack the required libraries into $
.
Configure the libraries
For your app to run, the API must be able to find the required libraries. If you got the API using Maven, the libraries have been downloaded to your user directory in the ~/.arcgis
folder. Since the API can automatically find the libraries at this location, no further configuration is necessary.
Getting the API manually
If you don't want to use a build tool like Gradle or Maven, you can download and set up the dependencies manually.
For a starter project using the API .zip file with instructions for Eclipse and IntelliJ, download or clone the java-zip-starter-project on GitHub.
For the API dependencies:
- Download ArcGIS Maps SDK for Java as a .zip or .tgz.
- Extract the archive contents and copy the libs, jniLibs, and resources folders into the root of your project directory.
- Add all of the jars in the libs folder to your classpath.
For the OpenJFX dependencies:
- Download the OpenJFX SDK (17.0.11 or 21.0.3) from Gluon.
- Extract the archive contents and copy the directory into the root of your project directory.
- Add the JavaFX jars to your module path. The API requires the
javafx.controls
,javafx.fxml
,javafx.web
,javafx.media
, andjavafx.graphics
modules. Refer to Gluon's documentation for setup instructions.
Configure the native libraries
For your app to run, the API must be able to find the required libraries. You have a few options, ordered here by priority:
-
The absolute path to the downloaded API specified programmatically at the start of your app's code:
Use dark colors for code blocks Copy ArcGISRuntimeEnvironment.setInstallDirectory("C:/path/to/arcgis-maps-sdk-java-200.5.0")
-
The current working directory according to Java's
user.dir
system property. This is usually the project's root directory when run from an IDE, or the directory from which you run your app's jar. -
The location you specify by the environment variable
ARCGISRUNTIMESDKJAVA
._200 _5 _0
If the native libraries are not properly configured, you will see an exception similar to the following:
Caused by: java.lang.RuntimeException: Could not find runtime in any of:
- A directory specified by calling ArcGISRuntimeEnvironment.setInstallDirectory()
- The current directory C:\Users\johndoe\my-project-directory
- A location specified by the environment variable ARCGISRUNTIMESDKJAVA_200_5_0
- Within the ".arcgis" directory in the user's home path C:\Users\johndoe\.arcgis
Additional downloads
Additional sources of sample code, data, and tools are available to enhance your development projects. You can even download this guide as stand-alone developer documentation.
Sample code
Review sample code in our complete sample directory, or download the code from our GitHub repository. Interact with live samples using the sample viewer app.
ArcGIS Maps SDK for Java Toolkit
ArcGIS Maps SDK for Java Toolkit contains controls and utilities to simplify your app development. For example:
- Compass: A control that shows orientation when a map is rotated.
- OverviewMap: An overview map control that indicates the viewpoint of another map or scene view.
- Scalebar: Scalebar control that shows an accurate distance that can be used to visually gauge distances on a map view.
Local Server
Local Server enables you to run offline geoprocessing tasks to provide advanced spatial analysis and data manipulation in your applications. These tasks work in the same way as geoprocessing tasks running on ArcGIS Enterprise. If you want to run offline geoprocessing tasks in your app, install Local Server following the steps in Local Server.
Stand-alone developer documentation
You can download the developer documentation as an archive from the downloads page. The archive contains instructions to serve the documentation from a local web server so you can access it without a connection to the internet. The stand-alone documentation includes the developer guide, API reference, tutorials, and samples documentation. This documentation is designed to run on a local stand-alone computer or on an internal network and not on the public internet.
To serve the documentation locally:
- Download the documentation for the SDK you want to use. The downloaded files are in a .zip archive format.
- Extract the archive to a local folder. The extracted archive has two subfolders:
public
andinstall
. - Open the
READM
file in theE.md install
folder and follow the instructions for your chosen web server.
Supplemental data
StreetMap Premium
StreetMap Premium delivers a high-quality, multiscale cartographic map display with enriched street data. In addition, it provides accurate geocoding, optimized routing, easy to follow directions, and powerful network analysis. StreetMap Premium maps can simultaneously fulfill the need for an address locator, street network dataset, and basemap in your apps. They are consistent across all regions of the world and are available for both online, connected scenarios and for use in offline, disconnected scenarios in the form of mobile map packages.
If you want to use StreetMap Premium data (the StreetMap Premium extension), download the demonstration data from the downloads page for development and testing. Please contact Esri Customer Service for access to a region of your choice for development and testing or to license StreetMap Premium data for deployment.
Projection Engine data
Datum transformations are used when geometries must be projected from one spatial reference to another when there is a difference in the datum that underlies the two spatial references. Datum transformations can be mathematically defined (equation-based transformations), or may rely on external supporting files (grid-based transformations). Certain Projection Engine data files must be present when you use a grid-based transformation in your app; attempting to use a transformation with missing Projection Engine files will cause an error. The API can detect whether the necessary files are available on the local file system.
If your app requires grid-based transformations, you can download supporting Projection Engine files from the downloads page. See the Spatial references topic for more information about working with coordinate systems, projections, and datum transformations.
Electronic Navigational Charts (ENC)
Electronic navigational charts (ENCs) are georeferenced vector datasets for the visualization and analysis of hydrographic and maritime information. This SDK supports ENCs that conform to the International Hydrographic Organization (IHO) S-57 standard.
If you want to work with Electronic Navigational Charts (ENC) download the hydrography directory from the downloads page.
See the Display electronic navigational charts topic for more information about working with ENC data.