<?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>
	<parent>
		<groupId>org.apache.jena</groupId>
		<artifactId>jena-jdbc</artifactId>
		<version>4.6.0</version>
	</parent>
	<artifactId>jena-jdbc-driver-bundle</artifactId>
	<name>Apache Jena - JDBC Driver Bundle</name>
	<description>An artifact which bundles up the standard Jena JDBC drivers into a single shaded JAR file to provide a convenience dependency</description>

	<properties>
		<plugin.license.headerPath>${project.parent.basedir}</plugin.license.headerPath>
		<automatic.module.name>org.apache.jena.jdbc.driver.bundle</automatic.module.name>
		<!-- Note that we actually skip tests in this module because this module 
			simply bundles up the other modules BUT it contains a JUnit suite primarily 
			as a convenience for being able to perform code coverage analysis easily 
			on all the modules. This is essentially a compromise to work around the Eclipse 
			EMMA plugin having limited configurability and making it otherwise impossible 
			to easily analyse code coverage on a multi-module project short of running 
			the Emma plugin on your Jenkins server, however doing that loses the visual 
			benefit of being able to see in Eclipse what code is and isn't covered -->
		<skipTests>true</skipTests>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-mem</artifactId>
			<version>4.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-remote</artifactId>
			<version>4.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-tdb</artifactId>
			<version>4.6.0</version>
		</dependency>

		<!-- Test Dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-mem</artifactId>
			<version>4.6.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-remote</artifactId>
			<version>4.6.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-tdb</artifactId>
			<version>4.6.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-core</artifactId>
			<version>4.6.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-fuseki-main</artifactId>
			<version>4.6.0</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!-- Shade Plugin -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<configuration>
					<transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
						<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
						<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
							<addHeader>false</addHeader>
						</transformer>
					</transformers>
					<createDependencyReducedPom>false</createDependencyReducedPom>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<!-- Javadoc Plugin -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<configuration>
					<quiet>true</quiet>
					<encoding>UTF-8</encoding>
					<charset>UTF-8</charset>
					<docencoding>UTF-8</docencoding>

					<!-- Include only JDBC dependencies -->
					<includeDependencySources>true</includeDependencySources>
					<includeTransitiveDependencySources>true</includeTransitiveDependencySources>
					<dependencySourceIncludes>
						<dependencySourceInclude>org.apache.jena:jena-jdbc*</dependencySourceInclude>
					</dependencySourceIncludes>

					<groups>
						<group>
							<title>JDBC Core</title>
							<packages>org.apache.jena.jdbc*</packages>
						</group>
						<group>
							<title>In-Memory Driver</title>
							<packages>org.apache.jena.jdbc.mem*</packages>
						</group>
						<group>
							<title>TDB Driver</title>
							<packages>org.apache.jena.jdbc.tdb*</packages>
						</group>
						<group>
							<title>Remote Endpoint Driver</title>
							<packages>org.apache.jena.jdbc.remote*</packages>
						</group>
					</groups>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
