<?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>5.0.0</version>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>31</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-5.0.0</tag>
  </scm>
  
  <properties>
    <!-- Build -->
    <java.version>17</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.outputTimestamp>2024-03-16T16:12:43Z</project.build.outputTimestamp>

    <!-- Logging -->
    <ver.slf4j>2.0.7</ver.slf4j>
    <ver.log4j2>2.23.1</ver.log4j2>

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

    <ver.jetty>12.0.7</ver.jetty>
    <ver.shiro>2.0.0</ver.shiro>

    <ver.protobuf>3.25.3</ver.protobuf>
    <ver.libthrift>0.19.0</ver.libthrift>

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

    <ver.gson>2.10.1</ver.gson>
    <ver.lucene>9.10.0</ver.lucene>

    <ver.commons-io>2.15.1</ver.commons-io>
    <ver.commons-cli>1.6.0</ver.commons-cli>
    <ver.commons-lang3>3.14.0</ver.commons-lang3>
    <ver.commons-rdf>0.5.0</ver.commons-rdf>
    <ver.commons-csv>1.10.0</ver.commons-csv>
    <ver.commons-codec>1.16.1</ver.commons-codec>
    <ver.commons-compress>1.26.1</ver.commons-compress>
    <ver.commons-collections>4.4</ver.commons-collections>
    <ver.commons-fileupload>2.0.0-M2</ver.commons-fileupload>

    <ver.dexxcollection>0.7</ver.dexxcollection>
    <ver.micrometer>1.12.3</ver.micrometer>
    <ver.roaringbitmap>1.0.5</ver.roaringbitmap>

    <!-- Testing -->
    <ver.junit4>4.13.2</ver.junit4>
    <ver.junit5>5.10.2</ver.junit5>
    <ver.junit5-platform>1.10.2</ver.junit5-platform>
 
    <ver.mockito>5.11.0</ver.mockito>
    <ver.awaitility>4.2.0</ver.awaitility>
    <ver.contract.tests>0.2.0</ver.contract.tests>

    <!-- For testing, not shipped -->
    <ver.graalvm>23.0.3</ver.graalvm>
    <ver.org.openjdk.jmh>1.37</ver.org.openjdk.jmh>

    <!-- GeoSPARQL related -->
    <ver.jaxb-api>2.3.1</ver.jaxb-api>
    <ver.jakarta-xml-bind>4.0.2</ver.jakarta-xml-bind>
    <ver.jcommander>1.82</ver.jcommander>
    <ver.sis>1.4</ver.sis>
    <ver.jts>1.19.0</ver.jts>

    <!-- Plugins -->
    <ver.plugin.rat>0.16.1</ver.plugin.rat>
    <ver.plugin.assembly>3.7.0</ver.plugin.assembly>
    <ver.plugin.compiler>3.12.1</ver.plugin.compiler>
    <ver.plugin.surefire>3.2.5</ver.plugin.surefire>
    <ver.plugin.javadoc>3.6.3</ver.plugin.javadoc>
    <ver.plugin.war>3.4.0</ver.plugin.war>
    <ver.plugin.shade>3.5.2</ver.plugin.shade>
    <ver.plugin.enforcer>3.4.1</ver.plugin.enforcer>
    <ver.plugin.cyclonedx>2.7.11</ver.plugin.cyclonedx>
    <ver.plugin.spdx>0.7.0</ver.plugin.spdx>
  </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> -->

        <module>jena-bom</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>

        <module>jena-bom</module>

      </modules>
    </profile>

  </profiles>

  <dependencyManagement>
    <dependencies>

      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>${ver.junit5}</version>
        <scope>test</scope>
      </dependency>
      
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-suite</artifactId>
        <version>${ver.junit5-platform}</version>
        <scope>test</scope>
      </dependency>
      
      <!-- Includes JUnit 4 : Needed for older testing code. -->
      <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <version>${ver.junit5}</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${ver.junit4}</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.commons-io}</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>

      <!-- 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>
          <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>*</artifactId>
          </exclusion>

          <!-- 
               Jena does not use the RPC capabilities of Thrift,
               only the binary data format.
          -->
          <exclusion>
            <groupId>org.apache.httpcomponents.client5</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.httpcomponents.core5</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>jakarta.servlet</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>jakarta.annotation</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

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

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

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

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-fileupload2-jakarta-servlet6</artifactId>
        <version>${ver.commons-fileupload}</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>
        <exclusions>
          <!-- These sometimes cause a convergence error with Caffeine -->
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
        </exclusions>
      </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>    
      
      <!-- 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.eclipse.jetty.ee10</groupId>
        <artifactId>jetty-ee10-bom</artifactId>
        <version>${ver.jetty}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>

      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-bom</artifactId>
        <version>${ver.shiro}</version>
        <scope>import</scope>
        <type>pom</type>
      </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-slf4j2-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.commons-cli}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-rdf-api</artifactId>
        <version>${ver.commons-rdf}</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>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>${ver.jakarta-xml-bind}</version>
      </dependency>
      
      <!-- Needed by jena-geosparql -->
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${ver.jaxb-api}</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>*</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>${ver.plugin.rat}</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>

      <!-- SBOM : CycloneDX -->
      <plugin>
        <groupId>org.cyclonedx</groupId>
        <artifactId>cyclonedx-maven-plugin</artifactId>
        <version>${ver.plugin.cyclonedx}</version>
        <executions>
          <execution>
            <id>build-sbom-cyclonedx</id>
            <phase>package</phase>
            <goals>
              <goal>makeAggregateBom</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <outputName>${project.artifactId}-${project.version}-bom</outputName>
        </configuration>
      </plugin>

      <!-- SBOM : SPDX -->
      <!-- Example : placeholder
           <plugin>
           <groupId>org.spdx</groupId>
           <artifactId>spdx-maven-plugin</artifactId>
           <version>${ver.plugin.spdx}</version>
           <configuration>
           <licenseDeclared>Apache-2.0</licenseDeclared>
           <copyrightText>See NOTICE file</copyrightText>
           </configuration>
           <executions>
           <execution>
           <id>build-sbom-spdx</id>
           <phase>package</phase>
           <goals>
           <goal>createSPDX</goal>
           </goals>
           </execution>
           </executions>
           </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>${ver.plugin.assembly}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${ver.plugin.compiler}</version>
          <configuration>
            <release>${java.version}</release>
            <compilerArgument>-proc:none</compilerArgument>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${ver.plugin.surefire}</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>${ver.plugin.javadoc}</version>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <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/tdb2/</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>
            </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>${ver.plugin.enforcer}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>${ver.plugin.shade}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>${ver.plugin.war}</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>
