<?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.9.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.9.0</version>
    </dependency>

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

    <dependency>
        <groupId>org.apache.jena</groupId>
        <artifactId>jena-iri</artifactId>
        <version>4.9.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>
