<?xml version="1.0" encoding="UTF-8"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <name>Apache Jena</name>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena</artifactId>
  <packaging>pom</packaging>
  <url>https://jena.apache.org/</url>
  <version>4.9.0</version>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>30</version>
  </parent>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

  <organization>
    <name>The Apache Software Foundation</name>
    <url>https://www.apache.org/</url>
  </organization>

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/jena.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/jena.git</developerConnection>
    <url>https://gitbox.apache.org/repos/asf/jena.git</url>
    <tag>jena-4.9.0</tag>
  </scm>

   <properties>
     <!-- Build -->
    <java.version>11</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.outputTimestamp>2023-07-04T17:03:24Z</project.build.outputTimestamp>

    <!-- Testing -->
    <ver.junit>4.13.2</ver.junit>  
    <ver.mockito>5.4.0</ver.mockito>
    <ver.awaitility>4.2.0</ver.awaitility>
    <ver.contract.tests>0.2.0</ver.contract.tests>

    <!-- Dependencies -->
    <ver.slf4j>1.7.36</ver.slf4j>
    <ver.log4j2>2.20.0</ver.log4j2>

    <ver.lucene>9.5.0</ver.lucene>

    <ver.jetty>10.0.15</ver.jetty>
    <ver.shiro>1.11.0</ver.shiro>

    <ver.protobuf>3.23.3</ver.protobuf>
    <ver.libthrift>0.18.1</ver.libthrift>

    <!-- JSON-LD 1.1 -->
    <ver.titanium-json-ld>1.3.2</ver.titanium-json-ld>
    <ver.jakarta.json>2.0.1</ver.jakarta.json>

    <!-- JSON-LD 1.0 -->
    <!-- jsonld-java depends on depends on Jackson core
         and Jackson databind. databind has had a few CVEs
         so we exclude from jsonldjava and select the version
         ourselves.
         When upgrading jsonld, consult jsonld-java's
         POM for the correct dependency versions
         and use that or later.
    -->
    <ver.jsonldjava>0.13.4</ver.jsonldjava>
    <ver.jackson>2.15.2</ver.jackson>
    <ver.httpclient>4.5.14</ver.httpclient>
    <ver.httpcore>4.4.16</ver.httpcore>

    <ver.caffeine>3.1.6</ver.caffeine>
    <!-- Most of Jena uses other libraries for equivalent functionality. -->
    <ver.guava>32.1.1-jre</ver.guava>

    <ver.gson>2.10.1</ver.gson>
    <ver.commonsio>2.11.0</ver.commonsio>
    <ver.commonscli>1.5.0</ver.commonscli>
    <ver.commonslang3>3.12.0</ver.commonslang3>
    <ver.commonsrdf>0.5.0</ver.commonsrdf>
    <ver.commonscsv>1.10.0</ver.commonscsv>
    <ver.commons-codec>1.15</ver.commons-codec>
    <ver.commons-compress>1.23.0</ver.commons-compress>
    <ver.commons-collections>4.4</ver.commons-collections>
    <ver.dexxcollection>0.7</ver.dexxcollection>
    <ver.micrometer>1.11.1</ver.micrometer>
    <ver.roaringbitmap>0.9.45</ver.roaringbitmap>

    <!-- For testing, not shipped -->
    <ver.graalvm>22.3.2</ver.graalvm>
    <ver.jython>2.7.3</ver.jython>
    <ver.org.openjdk.jmh>1.36</ver.org.openjdk.jmh>

    <!--- GeoSPARQL related -->
    <ver.jcommander>1.82</ver.jcommander>
    <ver.sis>1.1</ver.sis>
    <ver.jts>1.19.0</ver.jts>

    <!-- 
         A default value so it is defined everywhere (albeit with duplicates)
         Modulenames can't have "-" so tricky to use ${project.*} variables
         <automatic.module.name>org.apache.jena</automatic.module.name>
    -->

   </properties>

   <issueManagement>
     <system>JIRA</system>
     <url>https://issues.apache.org/jira/browse/JENA</url>
   </issueManagement>

   <mailingLists>
     <mailingList>
       <name>Jena Users Mailing List</name>
       <post>users@jena.apache.org</post>
       <subscribe>users-subscribe@jena.apache.org</subscribe>
       <unsubscribe>users-unsubscribe@jena.apache.org</unsubscribe>
       <archive>https://lists.apache.org/list.html?users@jena.apache.org</archive>
       <otherArchives>
         <otherArchive>https://mail-archives.apache.org/mod_mbox/jena-users/</otherArchive>
         <otherArchive>https://www.mail-archive.com/users@jena.apache.org/</otherArchive>
         <otherArchive>https://markmail.org/search/?q=list%3Aorg.apache.jena.users</otherArchive>
       </otherArchives>
     </mailingList>
     <mailingList>
       <name>Jena Developers Mailing List</name>
       <post>dev@jena.apache.org</post>
       <subscribe>dev-subscribe@jena.apache.org</subscribe>
       <unsubscribe>dev-unsubscribe@jena.apache.org</unsubscribe>
       <archive>https://lists.apache.org/list.html?dev@jena.apache.org</archive>
       <otherArchives>
         <otherArchive>https://lists.apache.org/mod_mbox/jena-dev/</otherArchive>
         <otherArchive>https://www.mail-archive.com/dev@jena.apache.org/</otherArchive>
         <otherArchive>https://markmail.org/search/?q=list%3Aorg.apache.jena.dev</otherArchive>
       </otherArchives>
     </mailingList>
     <mailingList>
       <name>Jena Commits</name>
       <post>commits@jena.apache.org</post>
       <subscribe>commits-subscribe@jena.apache.org</subscribe>
       <unsubscribe>commits-unsubscribe@jena.apache.org</unsubscribe>
       <archive>https://lists.apache.org/list.html?commits@jena.apache.org</archive>
       <otherArchives>
         <otherArchive>https://mail-archives.apache.org/mod_mbox/jena-commits/</otherArchive>
       </otherArchives>
     </mailingList>
   </mailingLists>

   <profiles>
     <profile>
       <!--
           This is the dev profile, typically used locally with 
           "mvn clean install -Pdev".
           It builds the modules shipped in apache-jena binaries
           but does not build these binaries.
           This profile does not build javadoc.
       -->
       <id>dev</id>
       <modules>
         <module>jena-iri</module>
         <module>jena-base</module>
         
         <module>jena-core</module>
         <module>jena-arq</module>
         <module>jena-shacl</module>
         <module>jena-shex</module>
         <module>jena-rdfpatch</module>
         <module>jena-rdfconnection</module>
         <module>jena-db</module>
         <module>jena-tdb1</module>
         <module>jena-tdb2</module>
         
         <module>apache-jena-libs</module>

         <module>jena-text</module>
         
         <module>jena-cmds</module>
         <module>jena-geosparql</module>
         <module>jena-fuseki2</module>

         <module>jena-integration-tests</module>

         <module>jena-benchmarks</module>
         <!-- Binary distribution -->
         <!-- <module>apache-jena</module> -->

       </modules>

       <build>
         <plugins>
           <!-- For -Pdev :: don't create javadoc. -->
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-javadoc-plugin</artifactId>
             <configuration>
               <skip>true</skip>
             </configuration>
           </plugin>
         </plugins>
       </build>

     </profile>

     <profile>
       <!--
           This is the complete profile, it builds everything including slow
           building modules and the distribution packages.
       -->
       <id>complete</id>
       <activation>
         <activeByDefault>true</activeByDefault>
         <property>
           <name>profile.complete</name>
           <value>true</value>
         </property>
       </activation>
       <modules>
         <!-- Basic modules -->
         <module>jena-iri</module>
         <module>jena-base</module>

         <!-- Main modules -->
         <module>jena-core</module>
         <module>jena-arq</module>
         <module>jena-shacl</module>
         <module>jena-shex</module>
         <module>jena-rdfpatch</module>
         <module>jena-rdfconnection</module>
         <module>jena-db</module>
         <module>jena-tdb1</module>
         <module>jena-tdb2</module>
         <module>apache-jena-libs</module>

         <module>jena-text</module>

         <module>jena-cmds</module>
         <module>jena-fuseki2</module>

         <module>jena-geosparql</module>
         <module>jena-fuseki2/jena-fuseki-geosparql</module>
         
         <!--
             Tests of artifacts that require additional 
             modules built later in the build process.
             For example, using Fuseki as a test server to
             test remote client APIs.
         -->
         <module>jena-integration-tests</module>

         <module>jena-benchmarks</module>
         
         <!-- Binary distribution -->
         <module>apache-jena</module>

         <!-- Other -->
         <module>jena-permissions</module>
         <module>jena-extras</module>
         <module>jena-examples</module>

         <!-- Slow building modules -->
         <module>jena-jdbc</module>

       </modules>
     </profile>

   </profiles>

   <dependencyManagement>
     <dependencies>
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>${ver.junit}</version>
         <scope>test</scope>
       </dependency>

       <dependency>
         <groupId>commons-codec</groupId>
         <artifactId>commons-codec</artifactId>
         <version>${ver.commons-codec}</version>
       </dependency>
       
       <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>${ver.commonsio}</version>
       </dependency>
       
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-compress</artifactId>
         <version>${ver.commons-compress}</version>
         <exclusions>
           <exclusion>
             <!-- This is scope=provided but interferes with log4j JENA-2137 -->
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <dependency>
         <groupId>com.fasterxml.jackson</groupId>
         <artifactId>jackson-bom</artifactId>
         <version>${ver.jackson}</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
       
       <!-- Protobuf only, not gRPC -->
       <dependency>
         <groupId>com.google.protobuf</groupId>
         <artifactId>protobuf-java</artifactId>
         <version>${ver.protobuf}</version>
       </dependency>
       
       <dependency>
         <groupId>org.apache.thrift</groupId>
         <artifactId>libthrift</artifactId>
         <version>${ver.libthrift}</version>
         <exclusions>
           <!-- Use whatever version Jena is using -->
           <exclusion>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpcore</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
           </exclusion>
           <!-- libthrift : 0.14.0 onwards : THRIFT-5375 -->
           <exclusion>
             <groupId>org.apache.tomcat.embed</groupId>
             <artifactId>tomcat-embed-core</artifactId>
           </exclusion>
           <exclusion>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.slf4j</groupId>
             <artifactId>*</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-csv</artifactId>
         <version>${ver.commonscsv}</version>
       </dependency>

       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
         <version>${ver.commonslang3}</version>
       </dependency>

       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-collections4</artifactId>
         <version>${ver.commons-collections}</version>
       </dependency>

       <dependency>
         <groupId>com.github.ben-manes.caffeine</groupId>
         <artifactId>caffeine</artifactId>
         <version>${ver.caffeine}</version>
       </dependency>

       <dependency>
         <groupId>com.google.guava</groupId>
         <artifactId>guava</artifactId>
         <version>${ver.guava}</version>
       </dependency>

       <!-- supports persistent data structures -->
       <dependency>
         <groupId>com.github.andrewoma.dexx</groupId>
         <artifactId>collection</artifactId>
         <version>${ver.dexxcollection}</version>
       </dependency>
       
       <dependency>
         <groupId>com.google.code.gson</groupId>
         <artifactId>gson</artifactId>
         <version>${ver.gson}</version>
       </dependency>    
       
       <!-- jsonld-java for JSON-LD 1.0 -->
       <dependency>
         <groupId>com.github.jsonld-java</groupId>
         <artifactId>jsonld-java</artifactId>
         <version>${ver.jsonldjava}</version>

         <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>
           <exclusion>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
           </exclusion>
           <exclusion>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.slf4j</groupId>
             <artifactId>*</artifactId>
           </exclusion>

           <!-- Exclude so we use our choice of versions -->
           <exclusion>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient-cache</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient-osgi</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpcore-osgi</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <!-- Control version of Apache HttpClient components -->
       <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpclient-cache</artifactId>
         <version>${ver.httpclient}</version>
         <exclusions>
           <!-- Replace with slf4j adapter -->
           <exclusion>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
           </exclusion>
           <exclusion>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
           </exclusion>
           <!-- JENA 2137: scope=provided and the enforcer plugin -->
           <exclusion>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpclient</artifactId>
         <version>${ver.httpclient}</version>
         <exclusions>
           <exclusion>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
           </exclusion>
           <exclusion>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
           </exclusion>
           <!-- JENA 2137: scope=provided and the enforcer plugin -->
           <exclusion>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpcore</artifactId>
         <version>${ver.httpcore}</version>
         <exclusions>
           <exclusion>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
           </exclusion>
           <exclusion>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       
       <!-- JSON-LD 1.1 read support -->
       <!-- Titanium JSON-LD -->
       <dependency>
         <!-- Apache License -->
         <groupId>com.apicatalog</groupId>
         <artifactId>titanium-json-ld</artifactId>
         <version>${ver.titanium-json-ld}</version>
       </dependency>
       <!-- Eclipse Public License 2.0 (category-B) -->
       <!--
           Not required if using org.glassfish:jakarta.json because 
           that contains a copy. Less shading warnings if not used
           in jena-arq.
       -->
       <dependency>
         <groupId>jakarta.json</groupId>
         <artifactId>jakarta.json-api</artifactId>
         <version>${ver.jakarta.json}</version>
       </dependency>

       <!-- Eclipse Public License 2.0 (category-B) -->
       <dependency>
         <groupId>org.glassfish</groupId>
         <artifactId>jakarta.json</artifactId>
         <version>${ver.jakarta.json}</version>
       </dependency>
       <!-- End JSON-LD 1.1 read support -->

       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-bom</artifactId>
         <version>${ver.jetty}</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
       
       <dependency>
         <groupId>org.apache.shiro</groupId>
         <artifactId>shiro-core</artifactId>
         <version>${ver.shiro}</version>
       </dependency>

       <dependency>
         <groupId>org.apache.shiro</groupId>
         <artifactId>shiro-web</artifactId>
         <version>${ver.shiro}</version>
         <!-- JENA-2137 : Dependency convergence -->
         <exclusions>
           <exclusion>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <!-- Lucene dependencies -->
       <dependency>
         <groupId>org.apache.lucene</groupId>
         <artifactId>lucene-core</artifactId>
         <version>${ver.lucene}</version>
         <type>jar</type>
       </dependency>

       <dependency>
         <groupId>org.apache.lucene</groupId>
         <artifactId>lucene-analysis-common</artifactId>
         <version>${ver.lucene}</version>
       </dependency>

       <dependency>
         <groupId>org.apache.lucene</groupId>
         <artifactId>lucene-queryparser</artifactId>
         <version>${ver.lucene}</version>
       </dependency>

       <dependency>
         <groupId>org.apache.lucene</groupId>
         <artifactId>lucene-highlighter</artifactId>
         <version>${ver.lucene}</version>
       </dependency>

       <dependency>
         <groupId>org.apache.lucene</groupId>
         <artifactId>lucene-backward-codecs</artifactId>
         <version>${ver.lucene}</version>
       </dependency>

       <!-- Logging -->
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>${ver.slf4j}</version>
       </dependency>

       <!-- 
            java.util.logging (JUL)
            Do not use jul-to-slf4j and slf4j-jdk14 together.
       -->
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-jdk14</artifactId>
         <version>${ver.slf4j}</version>
       </dependency>

       <!-- Log4j2 -->
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-bom</artifactId>
         <version>${ver.log4j2}</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>

       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-slf4j-impl</artifactId>
         <version>${ver.log4j2}</version>
         <optional>true</optional>
       </dependency>

       <!-- JENA-2137
            log4j depends on an old version of org.osgi.core (the minimum supported).
            Other dependencies may pull in org.osgi (even if scope=provided)
            and cause an enforcer error.
       -->
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-api</artifactId>
         <version>${ver.log4j2}</version>
         <optional>true</optional>
         <exclusions>
           <exclusion>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
         <version>${ver.log4j2}</version>
         <optional>true</optional>
         <exclusions>
           <exclusion>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <!-- And intercept any uses of Jakarta Commons Logging 
            e.g. Apache Common HTTP client. 
       -->

       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>jcl-over-slf4j</artifactId>
         <version>${ver.slf4j}</version>
       </dependency>

       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>jul-to-slf4j</artifactId>
         <version>${ver.slf4j}</version>
       </dependency>

       <dependency>
         <groupId>commons-cli</groupId>
         <artifactId>commons-cli</artifactId>
         <version>${ver.commonscli}</version>
       </dependency>

       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-rdf-api</artifactId>
         <version>${ver.commonsrdf}</version>
       </dependency>

       <dependency>
         <groupId>org.roaringbitmap</groupId>
         <artifactId>RoaringBitmap</artifactId>
         <version>${ver.roaringbitmap}</version>
       </dependency>

       <dependency>
         <groupId>org.graalvm.js</groupId>
         <artifactId>js</artifactId>
         <version>${ver.graalvm}</version>
       </dependency>

       <dependency>
         <groupId>org.graalvm.js</groupId>
         <artifactId>js-scriptengine</artifactId>
         <version>${ver.graalvm}</version>
       </dependency>

       <dependency>
         <groupId>org.python</groupId>
         <artifactId>jython-standalone</artifactId>
         <version>${ver.jython}</version>
         <scope>test</scope>
       </dependency>

       <dependency>
         <groupId>org.openjdk.jmh</groupId>
         <artifactId>jmh-core</artifactId>
         <version>${ver.org.openjdk.jmh}</version>
         <scope>test</scope>
       </dependency>

       <dependency>
         <groupId>org.openjdk.jmh</groupId>
         <artifactId>jmh-generator-annprocess</artifactId>
         <version>${ver.org.openjdk.jmh}</version>
         <scope>test</scope>
       </dependency>

       <dependency>
         <groupId>org.xenei</groupId>
         <artifactId>junit-contracts</artifactId>
         <version>${ver.contract.tests}</version>
         <scope>test</scope>
         <exclusions>
           <exclusion>
             <artifactId>commons-cli</artifactId>
             <groupId>commons-cli</groupId>
           </exclusion>
           <exclusion>
             <artifactId>commons-logging</artifactId>
             <groupId>commons-logging</groupId>
           </exclusion>
         </exclusions>
       </dependency>
       
       <dependency>
         <groupId>org.xenei</groupId>
         <artifactId>contract-test-maven-plugin</artifactId>
         <version>${ver.contract.tests}</version>
         <scope>test</scope>
       </dependency>

       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
         <version>${ver.mockito}</version>
         <scope>test</scope>
       </dependency>
       
       <dependency>
         <groupId>org.awaitility</groupId>
         <artifactId>awaitility</artifactId>
         <version>${ver.awaitility}</version>
       </dependency>

       <dependency>
         <groupId>io.micrometer</groupId>
         <artifactId>micrometer-core</artifactId>
         <version>${ver.micrometer}</version>
       </dependency>

       <dependency>
         <groupId>io.micrometer</groupId>
         <artifactId>micrometer-registry-prometheus</artifactId>
         <version>${ver.micrometer}</version>
       </dependency>

       <!-- jena-geosparql, jena-fuseki-geosparql related -->

       <dependency>
         <groupId>com.beust</groupId>
         <artifactId>jcommander</artifactId>
         <version>${ver.jcommander}</version>
       </dependency>

       <dependency>
         <groupId>javax.xml.bind</groupId>
         <artifactId>jaxb-api</artifactId>
         <version>2.3.1</version>
       </dependency>

       <dependency>
         <groupId>org.apache.sis.core</groupId>
         <artifactId>sis-referencing</artifactId>
         <version>${ver.sis}</version>
       </dependency>

       <dependency>
         <groupId>org.locationtech.jts</groupId>
         <artifactId>jts-core</artifactId>
         <version>${ver.jts}</version>
       </dependency>

       <dependency>
         <groupId>org.locationtech.jts.io</groupId>
         <artifactId>jts-io-common</artifactId>
         <version>${ver.jts}</version>
       </dependency>

       <dependency>
         <groupId>org.jdom</groupId>
         <artifactId>jdom2</artifactId>
         <version>2.0.6.1</version>
       </dependency>

       <dependency>
         <groupId>io.github.galbiston</groupId>
         <artifactId>expiring-map</artifactId>
         <version>1.0.2</version>
       </dependency>

       <dependency>
         <groupId>io.github.galbiston</groupId>
         <artifactId>rdf-tables</artifactId>
         <version>1.0.5</version>
         <exclusions>
           <exclusion>
             <groupId>org.apache.jena</groupId>
             <artifactId>jena-tdb</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.apache.jena</groupId>
             <artifactId>jena-tdb2</artifactId>
           </exclusion>
           <exclusion>
             <groupId>com.beust</groupId>
             <artifactId>jcommander</artifactId>
           </exclusion>
           <exclusion>
             <groupId>commons-beanutils</groupId>
             <artifactId>commons-beanutils</artifactId>
           </exclusion>
         </exclusions>
       </dependency>

       <dependency>
         <groupId>commons-beanutils</groupId>
         <artifactId>commons-beanutils</artifactId>
         <version>1.9.4</version>
       </dependency>

       <!-- END jena geosparql -->

     </dependencies>

   </dependencyManagement>

   <build>
     <defaultGoal>clean test install</defaultGoal>
     <!-- Run the enforcer plugin automatically at compile time -->
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
         <executions>
           <execution>
             <id>enforce</id>
             <goals>
               <goal>enforce</goal>
             </goals>
             <configuration combine.self="override">
               <rules>
                 <dependencyConvergence />
                 <requirePluginVersions>
                   <message>Best practice is to always define plugin versions!</message>
                   <banLatest>true</banLatest>
                   <banRelease>true</banRelease>
                 </requirePluginVersions>
                 <requireReleaseDeps>
                   <message>No SNAPSHOT dependencies are allowed!</message>
                   <onlyWhenRelease>true</onlyWhenRelease>
                 </requireReleaseDeps>
                 <requireMavenVersion>
                   <version>3.8.1</version>
                 </requireMavenVersion>
               </rules>
               <fail>true</fail>
               <failFast>false</failFast>
             </configuration>
           </execution>
         </executions>
       </plugin>

       <!-- Run the RAT Plugin -->
       <!--
           To run from the command line:
           mvn apache-rat:rat \
           -Drat.excludeSubProjects=false \
           -Drat.excludesFile=build-files/rat-exclusions.txt
       -->
       <plugin>
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
         <version>0.15</version>
         <!-- 
              Run only if maven is running from this POM,
              not when run in a sub-module with this as parent.
         -->
         <inherited>false</inherited>
         <executions>
           <execution>
             <id>rat-checks</id>
             <phase>validate</phase>
             <goals>
               <goal>check</goal>
             </goals>
           </execution>
         </executions>
         <configuration>
           <excludeSubProjects>false</excludeSubProjects>
           <excludesFile>build-files/rat-exclusions.txt</excludesFile>
         </configuration>
       </plugin>
     </plugins>

     <!-- Plugin version list: https://maven.apache.org/plugins/index.html -->
     <pluginManagement>
       <plugins>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-assembly-plugin</artifactId>
           <version>3.5.0</version>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>3.11.0</version>
           <configuration>
             <release>${java.version}</release>
           </configuration>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
           <version>3.0.0</version>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
           <configuration>
             <archive>
               <manifestEntries>
                 <Automatic-Module-Name>${automatic.module.name}</Automatic-Module-Name>
               </manifestEntries>
             </archive>
           </configuration>
           <!-- Some modules provide test frameworks
             <executions>
               <execution>
                 <goals>
                   <goal>test-jar</goal>
                 </goals>
               </execution>
             </executions>
           -->
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-source-plugin</artifactId>
           <executions>
             <execution>
               <id>attach-sources</id>
               <goals>
                 <goal>jar-no-fork</goal>
               </goals>
             </execution>
             <!-- see jar-plugin
             <execution>
               <id>attach-sources-test</id> 
               <goals>
                 <goal>test-jar-no-fork</goal> 
               </goals>
             </execution>
             -->
           </executions>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
           <version>3.5.0</version>
           <executions>
             <execution>
               <id>attach-javadocs</id>
               <goals>
                 <goal>jar</goal>
               </goals>
             </execution>
           </executions>
           <configuration>
             <!-- Fixes for Javadoc when building with Java11 -->
             <detectJavaApiLink>false</detectJavaApiLink>
             <source>${java.version}</source>

             <!-- To allow the build to keep going despite javadoc problems:
                  <failOnError>false</failOnError>
             -->
             <!-- For producible builds
                  https://maven.apache.org/guides/mini/guide-reproducible-builds.html
             -->
             <notimestamp>true</notimestamp>

             <!-- Java11 javadoc: "syntax,html" fails on things that aren't 
                  wrong and applies unrequested checks such as group "missing".
                  Java17 has fixed these and behaves as expected:
                  <doclint>syntax,html,reference</doclint>
             -->
             <doclint>none</doclint>
             <quiet>true</quiet>
             <version>true</version>
             <show>public</show>
             <encoding>UTF-8</encoding>
             <windowtitle>${project.name} ${project.version}</windowtitle>
             <doctitle>${project.name} ${project.version}</doctitle>
             <bottom>Licensed under the Apache License, Version 2.0</bottom>
             <links>
               <link>https://jena.apache.org/documentation/javadoc/jena/</link>
               <link>https://jena.apache.org/documentation/javadoc/arq/</link>
               <link>https://jena.apache.org/documentation/javadoc/tdb/</link>
               <link>https://jena.apache.org/documentation/javadoc/text/</link>
               <link>https://jena.apache.org/documentation/javadoc/rdfconnection/</link>
               <link>https://jena.apache.org/documentation/javadoc/fuseki2/</link>
               <link>https://jena.apache.org/documentation/javadoc/permissions/</link>
               <link>https://jena.apache.org/documentation/javadoc/jdbc/</link>
             </links>
             <!-- Settings for @apiNote, @implSpec and @implNote -->
             <tags>
               <tag>
                 <name>apiNote</name>
                 <placement>a</placement>
                 <head>API Note:</head>
               </tag>
               <tag>
                 <name>implSpec</name>
                 <placement>a</placement>
                 <head>Implementation Requirements:</head>
               </tag>
               <tag>
                 <name>implNote</name>
                 <placement>a</placement>
                 <head>Implementation Note:</head>
               </tag>
             </tags>
           </configuration>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-resources-plugin</artifactId>
           <configuration>
             <encoding>UTF-8</encoding>
           </configuration>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
           <configuration>
             <overWriteReleases>false</overWriteReleases>
             <overWriteIfNewer>true</overWriteIfNewer>
           </configuration>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-enforcer-plugin</artifactId>
           <version>3.3.0</version>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-shade-plugin</artifactId>
           <version>3.4.1</version>
         </plugin>

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-war-plugin</artifactId>
           <version>3.3.2</version>
         </plugin>

         <!--
             Avoid the warnings and errors from m2e.
             This plugin's configuration is used to store Eclipse m2e settings only. 
             It has no influence on the Maven build itself.
         -->
         <plugin>
           <groupId>org.eclipse.m2e</groupId>
           <artifactId>lifecycle-mapping</artifactId>
           <version>1.0.0</version>
           <configuration>
             <lifecycleMappingMetadata>
               <pluginExecutions>
                 <pluginExecution>
                   <!-- 
                        Warning:
                        "maven-remote-resources-plugin (goal "process") is ignored by m2e." 
                   -->
                   <pluginExecutionFilter>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-enforcer-plugin</artifactId>
                     <versionRange>[1.0.0,)</versionRange>
                     <goals>
                       <goal>enforce</goal>
                     </goals>
                   </pluginExecutionFilter>
                   <action>
                     <ignore />
                   </action>
                 </pluginExecution>
                 <pluginExecution>
                   <!-- 
                        Warning:
                        "maven-enforcer-plugin (goal "enforce") is ignored by m2e." 
                   -->
                   <pluginExecutionFilter>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-remote-resources-plugin</artifactId>
                     <versionRange>[1.0.0,)</versionRange>
                     <goals>
                       <goal>process</goal>
                     </goals>
                   </pluginExecutionFilter>
                   <action>
                     <ignore />
                   </action>
                 </pluginExecution>
                 
                 <pluginExecution>
                   <!--
                       Error:
                       Plugin execution not covered by lifecycle configuration
                   -->
                   <pluginExecutionFilter>
                     <groupId>org.apache.rat</groupId>
                     <artifactId>apache-rat-plugin</artifactId>
                     <versionRange>[0.14,)</versionRange>
                     <goals>
                       <goal>check</goal>
                     </goals>
                   </pluginExecutionFilter>
                   <action>
                     <ignore />
                   </action>
                 </pluginExecution>

                 <pluginExecution>
                   <pluginExecutionFilter>
                     <groupId>org.xenei</groupId>
                     <artifactId>contract-test-maven-plugin</artifactId>
                     <versionRange>[0.1.5,)</versionRange>
                     <goals>
                       <goal>contract-test</goal>
                     </goals>
                   </pluginExecutionFilter>
                   <action>
                     <ignore />
                   </action>
                 </pluginExecution>
                 
               </pluginExecutions>
             </lifecycleMappingMetadata>
           </configuration>
         </plugin>

       </plugins>
    </pluginManagement>
  </build>

  <reporting>
    <!-- <outputDirectory>${project.build.directory}/site</outputDirectory> -->

    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <configuration>
          <outputDirectory>${project.basedir}/target/surefire-reports-html</outputDirectory>
        </configuration>
      </plugin>

    </plugins>
  </reporting>

</project>
