<?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>3.1.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>
		<!-- 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>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-remote</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-tdb</artifactId>
			<version>3.1.0</version>
		</dependency>

		<!-- Test Dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-mem</artifactId>
			<version>3.1.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-remote</artifactId>
			<version>3.1.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-driver-tdb</artifactId>
			<version>3.1.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-jdbc-core</artifactId>
			<version>3.1.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-fuseki1</artifactId>
			<version>1.4.0</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-fuseki1</artifactId>
			<version>1.4.0</version>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!-- Shade Plugin -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>2.1</version>
				<configuration>
					<transformers>
						<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>
				<version>2.9</version>
				<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>