<?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>3.14.0-SNAPSHOT</version>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>21</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>HEAD</tag>
  </scm>

   <properties>
    <ver.slf4j>1.7.26</ver.slf4j>
    <ver.log4j>1.2.17</ver.log4j>
    <ver.junit>4.12</ver.junit>  

    <ver.jetty>9.4.12.v20180830</ver.jetty>
    <ver.libthrift>0.13.0</ver.libthrift>

    <!-- 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.12.5</ver.jsonldjava>
    <ver.jackson>2.10.1</ver.jackson>
    <ver.jackson-databind>${ver.jackson}</ver.jackson-databind>

    <ver.commonsio>2.6</ver.commonsio>
    <ver.commonscli>1.4</ver.commonscli>
    <ver.commonslang3>3.9</ver.commonslang3>
    <ver.commonscsv>1.7</ver.commonscsv>
    <ver.commons-codec>1.13</ver.commons-codec>
    <ver.commons-compress>1.19</ver.commons-compress>

    <ver.dexxcollection>0.7</ver.dexxcollection>

    <ver.httpclient>4.5.10</ver.httpclient>
    <ver.httpcore>4.4.9</ver.httpcore>
    <!-- Normally, these are the same as the above
         In the case of 4.2.6, there isn't a httpcore-osgi.
    -->
    <ver.httpcore-osgi>${ver.httpcore}</ver.httpcore-osgi>
    <ver.httpclient-osgi>${ver.httpclient}</ver.httpclient-osgi>
    <ver.shiro>1.2.6</ver.shiro>
    <ver.lucene>7.4.0</ver.lucene>

    <ver.elasticsearch>6.4.2</ver.elasticsearch>
    <!-- make sure that the plugin version is compatible with the elasticsearch version -->
    <ver.elasticsearch.maven.plugin>6.8</ver.elasticsearch.maven.plugin>
    <!-- elasticsearch uses this by reflection -->
    <ver.log4j2>2.7</ver.log4j2>

    <ver.spatial4j>0.6</ver.spatial4j>

    <ver.mockito>1.9.5</ver.mockito>
    <ver.awaitility>3.1.0</ver.awaitility>
    <ver.micrometer>1.2.1</ver.micrometer>

    <jdk.version>1.8</jdk.version>
    <targetJdk>${jdk.version}</targetJdk>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ssZ</maven.build.timestamp.format>
    <ver.contract.tests>0.2.0</ver.contract.tests>
  </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-shaded-guava</module>
        <module>jena-iri</module>
        <module>jena-base</module>
        
        <module>jena-core</module>
        <module>jena-arq</module>
        <module>jena-shacl</module>
        <module>jena-rdfconnection</module>
        <module>jena-tdb</module>
        <module>jena-db</module> 
        <module>apache-jena-libs</module>

        <module>jena-text</module>
        <!-- <module>jena-text-es</module>        -->
        
        <module>jena-cmds</module>
        <module>jena-fuseki2</module>

        <module>jena-geosparql</module>
        <module>jena-fuseki2/jena-fuseki-geosparql</module>

        <module>jena-integration-tests</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-shaded-guava</module>
        <module>jena-iri</module>
        <module>jena-base</module>

        <!-- Main modules -->
        <module>jena-core</module>
        <module>jena-arq</module>
        <module>jena-shacl</module>
        <module>jena-rdfconnection</module>
        <module>jena-tdb</module>
        <module>jena-db</module>
        <module>apache-jena-libs</module>

        <module>jena-text</module>
        <module>jena-text-es</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, use Fuseki as a test server to
            test remote client APIs.
        -->
        <module>jena-integration-tests</module>
        
        <!-- Binary distribution -->
        <module>apache-jena</module>

        <!-- Old modules -->
        <!-- Retired: <module>jena-fuseki1</module> -->
        <!-- Retired: <module>jena-csv</module> -->
        <!-- Retired: <module>jena-maven-tools</module> -->

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

        <!-- Slow building modules -->
        <module>jena-jdbc</module>
        <!--  Fails when building with Java9 JDK because it requires 
             system jar jdk.tools which is not available in Java9 onwards
        -->
        <module>jena-elephas</module>
        <module>apache-jena-osgi</module>
      </modules>
    </profile>
  </profiles>

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

      <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>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${ver.httpclient}</version>
        <exclusions>
          <!-- Replace with slf4j adapter -->
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </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>
      </dependency>

      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${ver.jackson}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${ver.jackson-databind}</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>
        </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>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.4</version>
      </dependency>
      
      <!-- supports persistent data structures -->
      <dependency>
        <groupId>com.github.andrewoma.dexx</groupId>
        <artifactId>collection</artifactId>
        <version>${ver.dexxcollection}</version>
      </dependency>
      
      <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>
          <!-- 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>
      
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${ver.jetty}</version>
      </dependency>
      
      <!-- Jetty's useful servlets, inc compression -->
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlets</artifactId>
        <version>${ver.jetty}</version>
      </dependency>
      
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${ver.jetty}</version>
      </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>
      </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-analyzers-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>

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

      <dependency>
        <groupId>org.locationtech.spatial4j</groupId>
        <artifactId>spatial4j</artifactId>
        <version>${ver.spatial4j}</version>
      </dependency>

      <!-- Elasticsearch dependencies -->

      <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>${ver.elasticsearch}</version>
      </dependency>

      <!-- Elasticsearch Server
      <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${ver.elasticsearch}</version>
      </dependency>
      -->

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${ver.log4j2}</version>
      </dependency>
      
      <!-- Intercept direct use of log4j2 -->
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-to-slf4j</artifactId>
        <version>${ver.log4j2}</version>
      </dependency>

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

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

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

      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${ver.log4j}</version>
      </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>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>${ver.commonscli}</version>
      </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>
        </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-all</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>
    </dependencies>

  </dependencyManagement>

  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <!-- <optional>true</optional> -->
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <!-- <optional>true</optional> -->
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <!-- 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 />
                <requireJavaVersion>
                  <version>1.8.0</version>
                </requireJavaVersion>
                <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.5.0</version>
                </requireMavenVersion>
              </rules>
              <fail>true</fail>
              <failFast>false</failFast>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Run the RAT Plugin -->
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>0.12</version>
        <executions>
          <execution>
            <id>rat-checks</id>
            <phase>validate</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <excludeSubProjects>true</excludeSubProjects>
          <excludes>
            <exclude>**/hs_err_pid*.log</exclude>
            <exclude>**/.project</exclude>
            <exclude>**/.settings/**</exclude>
            <exclude>**/.classpath</exclude>
            <exclude>**/README.*</exclude>
            <exclude>**/META-INF/services/*</exclude>
            <!--
                jena-core exclusions
            -->
            <exclude>**/src-examples/data/*</exclude>
            
            <!--
                jena-fuseki exclusions
            -->
            <exclude>**/dist/ABOUT</exclude>
            <exclude>**/SEE_FUSEKI2</exclude>
            <!-- 
                 Need to exclude JS and CSS since much of it comes from other Apache licensed projects 
                 e.g. Bootstrap, Qonsole
                 
            -->
            <exclude>**/src/main/webapp/css/*</exclude>
            <exclude>**/src/main/webapp/fonts/*</exclude>
            <exclude>**/src/main/webapp/js/**/*</exclude>
            
            <!-- General exclusions -->
            <!-- 
                 Vocabularies are often just local copies of vocabularies
                 published by others
            -->
            <exclude>**/vocabularies/*</exclude>
            <exclude>**/Vocabularies/*</exclude>

            <!--
                Javadoc add-ons files are required to be simple and our javadoc configuration
                will ensure appropriate license and copyright statements are inserted
                into generated documentation anyway so no need to put license statements in these
                files
            -->
            <exclude>**/src/main/**/*.html</exclude>
            <exclude>**/src/**/package-info.java</exclude>
            
            <exclude>**/DEPENDENCIES</exclude>
            
            <!--
                Text and Markdown files are typically used only for documentation purposes
                and license declarations are usually spurious in these files since often they
                will refer to the LICENSE/NOTICE for users to find the actual licenses
            -->
            <exclude>**/*.txt</exclude>
            <exclude>**/*.md</exclude>
            
            <!--
                META-INF services files can include comments but a license header would be
                unecessarily clutter so we exclude these
            -->
            <exclude>**/META-INF/services/*</exclude>
            
            <!--
                Jena historically has large numbers of small test file
                with no license headers.  Such small files are not required 
                to have headers. 

                In addition, there are files with different Licenses
                (e.g. W3C Software Licence, W3C Test Suite License) as
                noted in the code tree.
            -->
            <exclude>**/src/test/resources/**/*</exclude>
            <exclude>**/testing/**/*</exclude>

            <exclude>**/log4j.properties</exclude>
            <exclude>**/log4j-testing.properties</exclude>
            <exclude>**/derby.log</exclude>
            <exclude>**/DB/**/*</exclude>
            <!-- TDB config files JSON - no comments allowed -->
            <exclude>**/tdb*.cfg</exclude>
            <!-- Fuseki2 server "run" area -->
            <exclude>**/run/**/*</exclude>
            <!-- Cached classpath for commands - autogenerated -->
            <exclude>**/*.classpath</exclude>
            <!-- Cached recommenders by Eclipse  - autogenerated -->
            <exclude>**/*.recommenders/**/*</exclude>

            <!-- Exclude anything created during the build (plugin generated files) ->-->
            <exclude>**/target/**/*</exclude>
            <!-- MSHADE-124 -->
            <exclude>**/dependency-reduced-pom.xml</exclude>
            <exclude>.travis.yml</exclude>
            <exclude>jena-examples/**</exclude>

            <!-- This is OGC software licensed -->
            <exclude>**/geosparql_vocab_all_v1_0_1_updated.rdf</exclude>

            <!-- W3C SHACL vocabulary and shapes for SHACL itself -->
            <exclude>**/src/main/resources/std/*</exclude>

          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
      </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.1.0</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
          <configuration>
            <showDeprecation>false</showDeprecation>
            <encoding>UTF-8</encoding>
            <debug>true</debug>
            <debuglevel>source,lines,vars</debuglevel>
            <optimize>true</optimize>
            <source>${jdk.version}</source>
            <target>${jdk.version}</target>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
          <!-- 
               Bug: SUREFIRE-1588
               https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911925
          -->
          <configuration>
            <useSystemClassLoader>false</useSystemClassLoader>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
        </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>
            <!-- Only needed in some jars <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.1.1</version>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <!-- Java 11: explicitly define the source as Java8 -->
            <source>8</source>
            <!-- Java 10
                 <additionalOptions>-html5</additionalOptions>
            -->
            <quiet>true</quiet>
            <doclint>none</doclint>
            <!-- To allow the build to keep going despite javadoc problems:
                 <failOnError>false</failOnError>
            -->
            <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>

        <!-- Temp fix for remote-resources while waiting for remote-resources >1.5
             1.6 should fix this - SNAPSHOT already does.
        -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-remote-resources-plugin</artifactId>
          <version>1.5</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.shared</groupId>
              <artifactId>maven-filtering</artifactId>
              <version>3.1.1</version>
            </dependency>
          </dependencies>
        </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.0.0-M1</version>
          <executions>
            <execution>
              <id>enforce</id>
              <goals>
                <goal>enforce</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <rules>
              <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>
              <DependencyConvergence />
            </rules>
            <fail>true</fail>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <version>4.2.0</version>
          <extensions>true</extensions>
        </plugin>

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

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</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.11,)</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>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          <instrumentation>
            <ignores>
              <ignore>org.slf4j.*</ignore>
            </ignores>
          </instrumentation>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.17</version>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <version>2.5</version>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.8</version>
        <configuration>
          <linkXref>true</linkXref>
          <sourceEncoding>utf-8</sourceEncoding>
          <minimumTokens>100</minimumTokens>
        </configuration>
      </plugin>

      <plugin>
        <groupId>com.github.spotbugs</groupId>
        <artifactId>spotbugs-maven-plugin</artifactId>
        <version>3.1.1</version>
      </plugin>
    </plugins>
  </reporting>

</project>
