<?xml version="1.0" encoding="UTF-8"?>
<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>

    <name>OpenTripPlanner</name>
    <description>The OpenTripPlanner multimodal journey planning system</description>
    <url>http://opentripplanner.org</url>

    <groupId>org.opentripplanner</groupId>
    <artifactId>otp</artifactId>
    <version>2.0.0</version>
    <packaging>jar</packaging>

    <licenses>
        <license>
            <name>GNU Lesser General Public License</name>
            <url>https://www.gnu.org/licenses/lgpl-3.0.txt</url>
        </license>
    </licenses>

    <!-- Developer entries are provided for only first six contributors on the Github stats page for to the 2.x branch.
       For other contributors, see https://github.com/opentripplanner/OpenTripPlanner/graphs/contributors -->
    <developers>
        <developer>
            <name>Andrew Byrd</name>
            <email>andrew@fastmail.net</email>
            <organization>Conveyal</organization>
            <organizationUrl>http://conveyal.com/</organizationUrl>
        </developer>
        <developer>
            <name>Matt Conway</name>
            <email>matt@indicatrix.org</email>
            <organization>Conveyal</organization>
            <organizationUrl>http://conveyal.com/</organizationUrl>
        </developer>
        <developer>
            <name>Thomas Gran</name>
            <email>tgr@capraconsulting.no</email>
            <organization>Ruter and Entur</organization>
            <organizationUrl>http://entur.org/</organizationUrl>
        </developer>
        <developer>
            <name>Laurent Grégoire</name>
            <email>laurent.gregoire@protonmail.ch</email>
            <organization>Mecatran</organization>
            <organizationUrl>http://www.mecatran.com/</organizationUrl>
        </developer>
        <developer>
            <name>Gard Mellemstrand</name>
            <email>gard.mellemstrand@entur.org</email>
            <organization>Entur</organization>
            <organizationUrl>http://entur.org/</organizationUrl>
        </developer>
        <developer>
            <name>David Novalis Turner</name>
            <email>novalis@novalis.org</email>
            <organization>Ex-OpenPlans</organization>
            <organizationUrl>http://openplans.org/</organizationUrl>
        </developer>
    </developers>

    <scm>
        <connection>scm:git:http://github.com/opentripplanner/OpenTripPlanner.git</connection>
        <developerConnection>scm:git:ssh://git@github.com/opentripplanner/OpenTripPlanner.git</developerConnection>
        <url>http://github.com/opentripplanner/OpenTripPlanner</url>
    </scm>

    <properties>
        <!-- Lib versions - keep list sorted on property name -->
        <geotools.version>21.2</geotools.version>
        <geotools.wfs.version>16.5</geotools.wfs.version>
        <jackson.version>2.10.1</jackson.version>
        <jersey.version>2.18</jersey.version>
        <!-- Other properties -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <distributionManagement>
        <!-- We are using Sonatype Nexus Staging instead of Maven Release plugin.
             Only a snapshot repo should be configured. Releases are done from that snapshot staging repo. -->
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

    <build>
        <!-- Filtering will perform substitution on maven-version.properties, see git commit id plugin below. -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/ext/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/client</directory>
                <targetPath>client</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
            <testResource>
                <directory>src/ext-test/resources</directory>
            </testResource>
            <testResource>
                <!-- Shell scripts to start up OTP, need to be filtered to insert the JAR file name. -->
                <!-- These are treated as testResources rather than resources to keep them out of the JAR. -->
                <!-- The staging repo will reject a JAR containing them as they use traversal paths (../..). -->
                <directory>src/scripts</directory>
                <filtering>true</filtering>
                <!-- Copy the scripts up into the root of the repo, not /target/classes -->
                <targetPath>../..</targetPath>
            </testResource>
        </testResources>
        <pluginManagement>
            <plugins>
                <!-- m2eclipse lifecycle mapping configuration. This controls which Maven build goals should
                be performed during incremental builds within the Eclipse IDE. There are sensible defaults
                for most plugins, but some others require manual configuration with <action><ignore /> or
                <action><execute /> filters. This section only affects incremental builds within Eclipse,
                not command-line Maven builds. That's why it's a pluginManagement without an accompanying plugin. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-dependency-plugin</artifactId>
                                        <versionRange>[1.0,)</versionRange>
                                        <goals>
                                            <goal>copy-dependencies</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore />
                                    </action>
                                </pluginExecution>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>pl.project13.maven</groupId>
                                        <artifactId>git-commit-id-plugin</artifactId>
                                        <versionRange>[1.0,)</versionRange>
                                        <goals>
                                            <goal>revision</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- Target Java versions -->
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <!-- For Java 11 Modules, specify a module name. Do not create module-info.java until all
                                 our dependencies specify a module name. -->
                            <Automatic-Module-Name>org.opentripplanner.otp</Automatic-Module-Name>
                        </manifestEntries>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <!-- OTP includes an empty javadoc.jar file. See docs/javadoc/README.md -->
                        <id>package-javadoc</id>
                        <phase>package</phase>
                        <goals><goal>jar</goal></goals>
                        <configuration>
                            <classesDirectory>${basedir}/docs/javadoc</classesDirectory>
                            <classifier>javadoc</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <!-- Recommended way to deploy to OSSRH , which allows deferred manual release to Central. -->
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6.7</version>
                <extensions>true</extensions>
                <configuration>
                    <serverId>ossrh</serverId>
                    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                    <autoReleaseAfterClose>true</autoReleaseAfterClose>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.webcohesion.enunciate</groupId>
                <artifactId>enunciate-maven-plugin</artifactId>
                <version>2.12.0</version>
                <executions>
                    <execution>
                        <!-- override default binding to process-sources phase (enunciate generates web services). -->
                        <phase>site</phase>
                        <goals>
                            <goal>docs</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <docsDir>${project.build.directory}/site/enunciate</docsDir>
                </configuration>
            </plugin>
            <plugin>
                <!-- OTP includes an empty javadoc.jar file. See docs/javadoc/README.md -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.2.0</version>
                <configuration><skip>true</skip></configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <id>build-helper-generate-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>src/main/java</source>
                                <source>src/ext/java</source>
                            </sources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>build-helper-generate-test-sources</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>src/test/java</source>
                                <source>src/ext-test/java</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <!-- We sign in the verify phase, which means it will happen for install and deploy but not package. -->
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <!-- we have to fork the JVM during tests so that the argLine is passed along -->
                    <forkCount>3</forkCount>
                    <!-- enable the restricted reflection under Java 11 so that the ObjectDiffer works -->
                    <argLine>
                        -Xmx2G
                        -Dfile.encoding=UTF-8
                        --illegal-access=permit
                        --add-opens java.base/java.lang.module=ALL-UNNAMED
                        --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED
                        --add-opens java.base/jdk.internal.misc=ALL-UNNAMED
                        --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
                        --add-opens java.base/jdk.internal.ref=ALL-UNNAMED
                        --add-opens java.base/jdk.internal.util=ALL-UNNAMED
                        --add-opens java.base/jdk.internal.util.jar=ALL-UNNAMED
                        --add-opens java.base/jdk.internal.module=ALL-UNNAMED
                        --add-opens java.base/java.lang=ALL-UNNAMED
                    </argLine>
                    <!-- Jenkins needs XML test reports to determine whether the build is stable. -->
                    <disableXmlReport>false</disableXmlReport>
                </configuration>
            </plugin>
            <plugin>
                <!-- Get current Git commit information for use in MavenVersion class.
                  Commit information is stored in Maven variables, which are then substituted
                  into the properties file. The plugin has a mode to generate a git.properties file,
                  but we need the Maven project version as well, so we perform substitution. -->
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>4.0.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <verbose>false</verbose>
                    <includeOnlyProperties>
                        <!-- Including each property used reduce the plugin execution time. -->
                        <includeOnlyProperty>project.version</includeOnlyProperty>
                        <includeOnlyProperty>git.commit.id</includeOnlyProperty>
                        <includeOnlyProperty>git.commit.id.describe</includeOnlyProperty>
                        <includeOnlyProperty>git.commit.time</includeOnlyProperty>
                        <includeOnlyProperty>git.build.time</includeOnlyProperty>
                        <includeOnlyProperty>git.branch</includeOnlyProperty>
                        <includeOnlyProperty>git.dirty</includeOnlyProperty>
                    </includeOnlyProperties>
                </configuration>
            </plugin>

            <!-- There used to be a dependency-plugin:copy-dependencies plugin entry
              here, but the shade-plugin will explode the dependencies even if they aren't
              manually copied in. -->
            <plugin>
                <!-- We want to create a standalone jar that can be run on the command
                  line. Java does not really allow this - you cannot place jars inside of jars.
                  You must either provide all the dependency jars to the user (usually lib/
                  under the directory containing the runnable jar) or explode all the jars
                  and repackage them into a single jar. The problem is that while class files
                  are nicely organized into the package namespace and should not collide, the
                  META-INF directories of the jars will collide. Maven's standard assembly
                  plugin does not account for this and will just clobber metadata. This then
                  causes runtime errors, particularly with Spring. Instead, we use the shade
                  plugin which has transformers that will for example append files of the same
                  name rather than overwrite them in the combined JAR. NB: Don't use a version
                  of the shade plugin older than 1.3.2, as it fixed MSHADE-76 (files not merged
                  properly if some input files are missing a terminating newline) -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <!-- exclude signatures from merged JAR to avoid invalid signature messages -->
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <!-- The shaded JAR will not be the main artifact for the project, it will be attached
                              for deployment in the way source and docs are. -->
                            <shadedArtifactAttached>true</shadedArtifactAttached>
                            <shadedClassifierName>shaded</shadedClassifierName>
                            <!-- MinimizeJar removes unused classes, (classes not imported explicitly by name).
                              We have eliminated most Jersey auto-scanning, but there is still some need for include
                              filters to force-include classes that are dynamically loaded by name/auto-scanned. -->
                            <!-- This roughly halves the size of the OTP JAR, bringing it down to around 20 MB.
                              <minimizeJar>true</minimizeJar>
                              <filters> <filter> <artifact>com.sun.jersey:*</artifact> <includes> <include>**</include>
                              </includes> </filter> <filter> <artifact>org.opentripplanner:*</artifact>
                              <includes> <include>**</include> </includes> </filter> </filters> -->
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>org.opentripplanner.standalone.OTPMain</Main-Class>
                                        <!-- The ImageIO lines allow some image reader plugins to work
                                             https://stackoverflow.com/questions/7051603/jai-vendorname-null#18495658 -->
                                        <Specification-Title>Java Advanced Imaging Image I/O
                                            Tools
                                        </Specification-Title>
                                        <Specification-Version>1.1</Specification-Version>
                                        <Specification-Vendor>Sun Microsystems, Inc.</Specification-Vendor>
                                        <Implementation-Title>com.sun.media.imageio</Implementation-Title>
                                        <Implementation-Version>1.1</Implementation-Version>
                                        <Implementation-Vendor>Sun Microsystems, Inc.</Implementation-Vendor>
                                        <Extension-Name>com.sun.media.imageio</Extension-Name>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <!-- Hack to force maven to check central first. Maven central is inherited from the superpom,
          but ends up at the end of the list. Though most of the time the artifact is in central,
          Maven tries to download from every other repository and fails before checking central.
          Do not change the id from central2 to central, otherwise the entry will be ignored. -->
        <repository>
          <id>central2</id>
          <name>Check central first to avoid a lot of not found warnings</name>
          <url>https://repo.maven.apache.org/maven2</url>
        </repository>
        <repository>
            <id>osgeo</id>
            <name>Open Source Geospatial Foundation Repository</name>
            <url>https://repo.osgeo.org/repository/release/</url>
        </repository>
        <repository>
            <id>geosolutions</id>
            <name>GeoSolutions Repository</name>
            <url>https://maven.geo-solutions.it/</url>
        </repository>
        <repository>
            <id>onebusaway-releases</id>
            <name>Onebusaway Releases Repo</name>
            <url>https://repo.camsys-apps.com/releases/</url>
        </repository>
    </repositories>

    <dependencies>
        <!-- Logging library, implements slf4j logging API -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.13</version>
        </dependency>
        <!-- Jersey uses java.util logging, redirect it to slf4j API (we use the Logback implementation) -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>1.7.6</version>
        </dependency>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-storage</artifactId>
            <version>1.101.0</version>
        </dependency>

        <!-- GEOTOOLS AND JTS TOPOLOGY: geometry, rasters and projections. -->
        <!-- GEOTOOLS includes JTS as a transitive dependency. -->
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-main</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-geojson</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-referencing</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-coverage</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-arcgrid</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-shapefile</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-geotiff</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-opengis</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-wfs</artifactId>
            <version>${geotools.wfs.version}</version>
        </dependency>
        <!-- provides EPSG database for projections (shapefile loading) -->
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-epsg-hsql</artifactId>
            <version>${geotools.version}</version>
        </dependency>

        <!-- TODO: this should be replaced by Jackson serialization -->
        <dependency>
            <groupId>de.grundid.opendatalab</groupId>
            <artifactId>geojson-jackson</artifactId>
            <version>1.2</version>
            <!-- We explicitly exclude jackson-core/databind as we use a more recent
                 version than the one geojson-jackson depends on, and the two seems to
                 be somehow incompatible. -->
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--
            Netex XML document - JAXB generated Java model.
            This is generated using the official Netex schema(v1.0) and support the entire model,
            not just the Nordic/Norwegian profile witch is currently supported by OTP.
         -->
        <dependency>
            <groupId>org.entur</groupId>
            <artifactId>netex-java-model</artifactId>
            <version>1.0.8</version>
        </dependency>

        <!-- SIRI -->
        <dependency>
            <groupId>org.entur</groupId>
            <artifactId>siri-java-model</artifactId>
            <version>0.12</version>
        </dependency>

        <!--
            The jaxb-api provides annotations like XmlElement indicating how classes should be (de)serialized.
            The jaxb-runtime pulls in the jaxb-api of the same version transitively. But we specify both api and
            runtime dependencies anyway here at the top level to prevent transitive dependencies from pulling in
            mismatched versions. This is overriding an older version of jaxb-api pulled in by the netex-java-model.
        -->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <!-- JAXB API Implementation no longer supplied with Java 11+ -->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.1</version>
        </dependency>

        <!-- TESTING -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.10.19</version>
            <scope>test</scope>
        </dependency>
        <!-- Provides some shared serializers for Kryo. Introduces transitive dependencies on Guava, Trove, and Kryo. -->
        <!-- Also provides classes for testing that a round trip through serialization reproduces the same network. -->
        <dependency>
            <groupId>com.conveyal</groupId>
            <artifactId>kryo-tools</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!-- Jersey annontation-driven REST web services (JAX-RS implementation) -->
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <!-- Deploy Jersey apps in stand-alone Grizzly server instead of a servlet container. -->
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-grizzly2-http</artifactId>
            <version>${jersey.version}</version>
        </dependency>

        <!-- Jackson modules. -->
        <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- Jackson modules to serialize Jersey response objects to JSON. -->
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-json-provider</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <!-- Asynchronous Websocket-capable client, for message-driven incremental GTFS-RT -->
        <!-- AsyncHttpClient Websockets need a newer version of Grizzly than Jersey does. -->
        <dependency>
            <groupId>com.ning</groupId>
            <artifactId>async-http-client</artifactId>
            <version>1.8.12</version>
        </dependency>
        <!-- OTHER DEPENDENCIES -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <!-- this dependency is provided by the servlet container, but we want to ensure the expected version. -->
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>jsr250-api</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
        <!-- OBA GTFS loader -->
        <dependency>
            <groupId>org.onebusaway</groupId>
            <artifactId>onebusaway-gtfs</artifactId>
            <version>1.3.87</version>
        </dependency>
        <!-- Processing is used for the debug GUI (though we could probably use just Java2D) -->
        <dependency>
            <groupId>org.processing</groupId>
            <artifactId>core</artifactId>
            <version>1.0.7</version>
        </dependency>
        <!-- Google Protocol Buffers compact binary serialization format -->
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.11.4</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <!-- Joda Time is a widely used replacement for flaky Java time classes. -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.1</version>
        </dependency>
        <!-- FlexJSON deserializes JSON in Nominatim/Yahoo/Google geocoder modules. -->
        <!-- Could be done with Jackson JSON trees. -->
        <dependency>
            <groupId>net.sf.flexjson</groupId>
            <artifactId>flexjson</artifactId>
            <version>2.0</version>
        </dependency>
        <!-- Used in DegreeGridNEDTileSource to fetch tiles from Amazon S3 -->
        <dependency>
            <groupId>net.java.dev.jets3t</groupId>
            <artifactId>jets3t</artifactId>
            <version>0.8.1</version>
        </dependency>
        <!-- OpenStreetMap protobuf (PBF) definitions and parser -->
        <dependency>
            <groupId>org.openstreetmap.osmosis</groupId>
            <artifactId>osmosis-osm-binary</artifactId>
            <version>0.47.3</version>
        </dependency>
        <!-- Command line parameter parsing -->
        <dependency>
            <groupId>com.beust</groupId>
            <artifactId>jcommander</artifactId>
            <version>1.78</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-math3</artifactId>
            <version>3.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java</artifactId>
            <version>14.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.5</version>
        </dependency>
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.javacsv</groupId>
            <artifactId>javacsv</artifactId>
            <version>2.0</version>
        </dependency>
        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.0</version>
        </dependency>
    </dependencies>
</project>
