<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>jena-core</artifactId>
  <packaging>jar</packaging>
  <name>Apache Jena - Core</name>
  <parent>
    <groupId>org.apache.jena</groupId>
    <artifactId>jena</artifactId>
    <version>4.10.0</version>
    <relativePath>..</relativePath>
  </parent>

  <description>Jena is a Java framework for building Semantic Web applications. It provides a programmatic environment for RDF, RDFS and OWL, SPARQL and includes a rule-based inference engine.</description>

  <properties>
    <build.time.xsd>${maven.build.timestamp}</build.time.xsd>
    <automatic.module.name>org.apache.jena.core</automatic.module.name>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.apache.jena</groupId>
      <artifactId>jena-base</artifactId>
      <version>4.10.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.jena</groupId>
      <artifactId>jena-base</artifactId>
      <version>4.10.0</version>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.jena</groupId>
        <artifactId>jena-iri</artifactId>
        <version>4.10.0</version>
    </dependency>

      <dependency>
          <artifactId>commons-cli</artifactId>
          <groupId>commons-cli</groupId>
      </dependency>

      <dependency>
          <groupId>org.roaringbitmap</groupId>
          <artifactId>RoaringBitmap</artifactId>
      </dependency>

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

      <dependency>
          <groupId>org.xenei</groupId>
          <artifactId>junit-contracts</artifactId>
      <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.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.awaitility</groupId>
      <artifactId>awaitility</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>

    <resources>

      <!-- Legacy -->
      <resource>
        <directory>etc</directory>
        <targetPath>etc</targetPath>
        <filtering>false</filtering>
      </resource>

      <resource>
        <filtering>false</filtering>
        <directory>src/main/resources</directory>
      </resource>

    </resources>

    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <includes>
            <include>org/apache/jena/test/TestPackage.java</include>
            <include>**/*_CS.java</include>
          </includes>
        </configuration>
      </plugin>

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

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <!-- OK for Java17 (compiling to Java11); not OK for Java11
               <doclint>syntax</doclint>
          -->
          <doclint>none</doclint>
          <windowtitle>Apache Jena API</windowtitle>
          <doctitle>Apache Jena Core ${project.version}</doctitle>
          <groups>
            <group>
              <title>API - Application Programming Interface</title>
              <packages>org.apache.jena.rdf.model:org.apache.jena.rdf.listeners:org.apache.jena.datatypes:org.apache.jena.datatypes.xsd:org.apache.jena.shared:org.apache.jena.vocabulary:org.apache.jena.rdfxml.xmlinput:org.apache.jena.rdfxml.xmloutput:org.apache.jena.ontology:org.apache.jena.reasoner:org.apache.jena.reasoner.rulesys:org.apache.jena.reasoner.rulesys.builtins:org.apache.jena.reasoner.transitiveReasoner</packages>
            </group>
            <group>
              <title>SPI - System Programming Interface</title>
              <packages>org.apache.jena.enhanced:org.apache.jena.graph:org.apache.jena.graph.compose:org.apache.jena.graph.query:org.apache.jena.util:org.apache.jena.util.iterator</packages>
            </group>
            <group>
              <title>Assembler</title>
              <packages>org.apache.jena.assembler</packages>
            </group>
          </groups>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals> 
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.xenei</groupId>
        <artifactId>contract-test-maven-plugin</artifactId>
        <version>${ver.contract.tests}</version>
        <configuration>
          <failOnError>false</failOnError>
          <packages>
            <package>org.apache.jena.assembler</package>
            <package>org.apache.jena.datatypes</package>
            <package>org.apache.jena.enhanced</package>
            <package>org.apache.jena.graph</package>
            <package>org.apache.jena.mem</package>
            <package>org.apache.jena.ontology</package>
            <package>org.apache.jena.rdf</package>
            <package>org.apache.jena.rdfxml</package>
            <package>org.apache.jena.reasoner</package>
            <package>org.apache.jena.shared</package>
            <package>org.apache.jena.util</package>
            <package>org.apache.jena.vocabulary</package>
          </packages>
          <skipFilter>Wildcard( *.test.* )</skipFilter>
          <unimplemented>
            <report>true</report>
            <failOnError>false</failOnError>
          </unimplemented>
          <untested>
            <report>true</report>
            <failOnError>false</failOnError>
          </untested>
          <errors>
            <report>true</report>
            <failOnError>false</failOnError>
          </errors>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>contract-test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
