<?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-SNAPSHOT</version>
	<packaging>pom</packaging>
	<description>Transaction Control service, including Resource Provider implementations.</description>
	<scm>
		<connection>
			scm:svn:http://svn.apache.org/repos/asf/aries/trunk/tx-control
		</connection>
		<developerConnection>
			scm:svn:https://svn.apache.org/repos/asf/aries/trunk/tx-control
		</developerConnection>
		<url>
			http://svn.apache.org/viewvc/aries/trunk/tx-control
		</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</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>