<?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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.sling.ide</groupId>
		<artifactId>sling-ide-shared-parent</artifactId>
		<version>1.2.3-SNAPSHOT</version>
		<relativePath>../parent/</relativePath>
	</parent>

	<artifactId>org.apache.sling.ide.api</artifactId>
	<name>Apache Sling IDE Tools API</name>

	<scm>
		<connection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</connection>
		<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</developerConnection>
		<url>https://gitbox.apache.org/repos/asf?p=sling-ide-tooling.git</url>
	</scm>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>copy</id>
						<phase>process-test-resources</phase>
						<goals>
							<goal>copy</goal>
						</goals>
						<configuration>
							<outputDirectory>target/test-classes</outputDirectory>
							<stripVersion>true</stripVersion>
							<artifactItems>
								<artifactItem>
									<groupId>org.apache.sling</groupId>
									<artifactId>org.apache.sling.tooling.support.install</artifactId>
									<version>1.0.6</version>
								</artifactItem>
								<artifactItem>
									<groupId>org.apache.sling</groupId>
									<artifactId>org.apache.sling.tooling.support.source</artifactId>
									<version>1.0.4</version>
								</artifactItem>
								<artifactItem>
									<groupId>org.apache.sling</groupId>
									<artifactId>org.apache.sling.commons.messaging</artifactId>
									<version>1.0.2</version>
								</artifactItem>
							</artifactItems>
							<!-- other configurations here -->
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>build-helper-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>reserve-network-port</id>
						<goals>
							<goal>reserve-network-port</goal>
						</goals>
						<phase>pre-integration-test</phase>
						<configuration>
							<portNames>
								<portName>http.port</portName>
							</portNames>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-failsafe-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>integration-test</goal>
							<goal>verify</goal>
						</goals>
						<configuration>
							<systemPropertyVariables>
								<sling.starter.port>${http.port}</sling.starter.port>
							</systemPropertyVariables>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<!-- launch the Sling instances to test; only oak-tar -->
			<plugin>
				<groupId>org.apache.sling</groupId>
				<artifactId>feature-launcher-maven-plugin</artifactId>
				<version>0.1.2</version>
				<configuration>
					<!-- newer versions don't work due to https://issues.apache.org/jira/browse/SLING-11158 -->
					<featureLauncherVersion>1.1.26</featureLauncherVersion>
					<launches>
						<launch>
							<id>sling-starter-oak-tar</id>
							<!-- launch the regular Starter distribution (based on Oak with Segment Node Store) -->
							<feature>
								<groupId>org.apache.sling</groupId>
								<artifactId>org.apache.sling.starter</artifactId>
								<version>12</version>
								<classifier>oak_tar</classifier>
								<type>slingosgifeature</type>
							</feature>
							<launcherArguments>
								<frameworkProperties>
									<org.osgi.service.http.port>${http.port}</org.osgi.service.http.port>
								</frameworkProperties>
							</launcherArguments>
							<startTimeoutSeconds>${startTimeoutSeconds}</startTimeoutSeconds>
						</launch>
					</launches>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>start</goal>
							<goal>stop</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>javax.jcr</groupId>
			<artifactId>jcr</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpmime</artifactId>
			<scope>provided</scope>
		</dependency>
		<!-- gson should be internal -->
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.9</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.framework</artifactId>
			<scope>provided</scope>
		</dependency>

		<!-- Note that OSGi annotations are OK since they are not retained at compile time -->
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.annotation.versioning</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.component.annotations</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.metatype.annotations</artifactId>
			<scope>provided</scope>
		</dependency>

		<!-- Test dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.11.0</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<properties>
		<startTimeoutSeconds>120</startTimeoutSeconds>
	</properties>
</project>
