<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- 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/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.sling</groupId>
		<artifactId>sling</artifactId>
		<version>33</version>
		<relativePath />
	</parent>

	<artifactId>org.apache.sling.fileoptim</artifactId>
	<version>0.9.0</version>
	<packaging>bundle</packaging>

	<name>Apache Sling File Optimization</name>
	<description>
        Bundle for optimizing files stored in the Apache Sling repository. Includes a plugin architecture for providing file optimizers and hooks to automatically and manually optimize files.
    </description>

	<scm>
		<connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-file-optimization.git</connection>
		<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-file-optimization.git</developerConnection>
		<url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-file-optimization.git</url>
		<tag>org.apache.sling.fileoptim-0.9.0</tag>
	</scm>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Sling-Nodetypes>SLING-INF/nodetypes/nodetypes.cnd</Sling-Nodetypes>
						<Sling-Model-Packages>org.apache.sling.fileoptim.models</Sling-Model-Packages>
						<Import-Package>!org.apache.tools.ant,!org.apache.tools.ant.types,*</Import-Package>
						<Embed-Dependency>
							*;scope=compile;inline=true
						</Embed-Dependency>
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencies>

		<!-- OSGi -->
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.component.annotations</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.metatype.annotations</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.annotation.versioning</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>osgi.core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>osgi.cmpn</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.webconsole</artifactId>
			<version>4.2.0</version>
			<scope>provided</scope>
		</dependency>

		<!-- JCR / Sling Commons -->
		<dependency>
			<groupId>javax.jcr</groupId>
			<artifactId>jcr</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.jackrabbit</groupId>
			<artifactId>jackrabbit-jcr-commons</artifactId>
			<version>2.7.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.sling</groupId>
			<artifactId>org.apache.sling.api</artifactId>
			<version>2.8.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.sling</groupId>
			<artifactId>org.apache.sling.servlets.post</artifactId>
			<version>2.3.22</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.sling</groupId>
			<artifactId>org.apache.sling.engine</artifactId>
			<version>2.6.12</version>
			<scope>provided</scope>
		</dependency>

		<!-- Image Optimization Dependencies -->
		<dependency>
			<groupId>com.github.depsypher</groupId>
			<artifactId>pngtastic</artifactId>
			<version>1.5</version>
			<scope>compile</scope>
		</dependency>


		<!-- Base Dependencies -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.4</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<artifactId>commons-codec</artifactId>
			<version>1.11</version>
			<groupId>commons-codec</groupId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<artifactId>org.apache.sling.commons.johnzon</artifactId>
			<version>1.1.0</version>
			<groupId>org.apache.sling</groupId>
			<scope>provided</scope>
		</dependency>

		<!-- Sling Models -->
		<dependency>
			<groupId>org.apache.sling</groupId>
			<artifactId>org.apache.sling.models.api</artifactId>
			<version>1.3.6</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-atinject_1.0_spec</artifactId>
			<version>1.0</version>
			<scope>provided</scope>
		</dependency>

		<!-- Test Dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<version>2.7.16</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
		</dependency>
	</dependencies>
</project>
