<?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</groupId>
		<artifactId>apache</artifactId>
		<version>17</version>
		<relativePath />
	</parent>

	<groupId>org.apache.aries.tx-control</groupId>
	<artifactId>tx-control</artifactId>
	<version>0.0.3</version>
	<packaging>pom</packaging>
	<description>Transaction Control service, including Resource Provider implementations.</description>
	<scm>
		<connection>
			scm:svn:http://svn.apache.org/repos/asf/aries/tags/tx-control-0.0.3
		</connection>
		<developerConnection>
			scm:svn:https://svn.apache.org/repos/asf/aries/tags/tx-control-0.0.3
		</developerConnection>
		<url>
			http://svn.apache.org/viewvc/aries/tags/tx-control-0.0.3
		</url>
	</scm>

	<profiles>
		<profile>
			<id>jdk18</id>
			<activation>
				<jdk>1.8</jdk>
			</activation>
			<modules>
				<module>tx-control-api</module>
				<module>tx-control-service-common</module>
				<module>tx-control-service-local</module>
				<module>tx-control-service-xa</module>
				<module>tx-control-provider-common</module>
				<module>tx-control-provider-jdbc-common</module>
				<module>tx-control-provider-jdbc-local</module>
				<module>tx-control-provider-jdbc-xa</module>
				<module>tx-control-provider-jpa-common</module>
				<module>tx-control-provider-jpa-local</module>
				<module>tx-control-provider-jpa-xa-plugin-eclipselink</module>
				<module>tx-control-provider-jpa-xa-plugin-hibernate-5_0</module>
				<module>tx-control-provider-jpa-xa-plugin-hibernate-5_2</module>
				<module>tx-control-provider-jpa-xa-plugin-openjpa</module>
				<module>tx-control-provider-jpa-xa</module>
				<module>tx-control-itests</module>
				<module>tx-control-jpa-itests</module>
			</modules>
		</profile>
	</profiles>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.osgi</groupId>
				<artifactId>org.osgi.core</artifactId>
				<version>5.0.0</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.osgi</groupId>
				<artifactId>osgi.annotation</artifactId>
				<version>6.0.1</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.osgi</groupId>
				<artifactId>org.osgi.util.tracker</artifactId>
				<version>1.5.1</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.osgi</groupId>
				<artifactId>org.osgi.service.cm</artifactId>
				<version>1.5.0</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.osgi</groupId>
				<artifactId>org.osgi.service.jdbc</artifactId>
				<version>1.0.0</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.osgi</groupId>
				<artifactId>org.osgi.service.jpa</artifactId>
				<version>1.0.0</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.osgi</groupId>
				<artifactId>org.osgi.service.metatype.annotations</artifactId>
				<version>1.3.0</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
				<version>1.7.0</version>
			</dependency>
			<dependency>
				<groupId>org.apache.geronimo.specs</groupId>
				<artifactId>geronimo-jpa_2.1_spec</artifactId>
				<version>1.0-alpha-1</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>com.zaxxer</groupId>
				<artifactId>HikariCP</artifactId>
				<version>2.4.3</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>4.11</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.mockito</groupId>
				<artifactId>mockito-all</artifactId>
				<version>1.9.5</version>
				<scope>test</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<configuration>
						<source>1.8</source>
						<target>1.8</target>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-jar-plugin</artifactId>
					<configuration>
						<useDefaultManifestFile>true</useDefaultManifestFile>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-javadoc-plugin</artifactId>
					<configuration>
						<source>1.8</source>
					</configuration>
				</plugin>
				<plugin>
					<groupId>biz.aQute.bnd</groupId>
					<artifactId>bnd-maven-plugin</artifactId>
					<version>3.2.0</version>
					<executions>
						<execution>
							<id>default-bnd-process</id>
							<goals>
								<goal>bnd-process</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>