<?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-tdb2</artifactId>
  <packaging>jar</packaging>
  <name>Apache Jena - DBOE TDB2 (Native Triple Store)</name>

  <parent>
    <groupId>org.apache.jena</groupId>
    <artifactId>jena-db</artifactId>
    <version>4.4.0</version>
  </parent> 

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

  <dependencies>

    <dependency>
      <groupId>org.apache.jena</groupId>
      <artifactId>jena-dboe-storage</artifactId>
      <version>4.4.0</version>
    </dependency>

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

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

  </dependencies>

  <build>
    <resources>
      <resource>
        <filtering>false</filtering>
        <directory>src/main/resources</directory>
        <excludes>
          <exclude>org/apache/jena/tdb2/tdb2-properties.xml</exclude>
        </excludes>
      </resource>
      <resource>
        <filtering>true</filtering>
        <directory>src/main/resources</directory>
        <includes>
          <include>org/apache/jena/tdb2/tdb2-properties.xml</include>
        </includes>
      </resource>
    </resources>

    <plugins> 

      <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>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <configuration>
          <includes>
            <include>**/TS_*.java</include>
            <include>**/Scripts_*.java</include>
          </includes>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <version>true</version>
          <show>public</show>
          <encoding>UTF-8</encoding>
          <windowtitle>Apache Jena TDB2</windowtitle>
          <doctitle>Apache Jena TDB2 ${project.version}</doctitle>
          <excludePackageNames>org.apache.jena.tdb2.*</excludePackageNames>
          <bottom>Licenced under the Apache License, Version 2.0</bottom>
        </configuration>
      </plugin>

    </plugins>
  </build>

</project>
