<!-- 
 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>
        <artifactId>felix-parent</artifactId>
        <groupId>org.apache.felix</groupId>
        <version>1.2.0</version>
        <relativePath>../pom/pom.xml</relativePath>
    </parent>

    <groupId>org.apache.felix</groupId>
    <artifactId>maven-scr-plugin</artifactId>

	<version>1.2.1-SNAPSHOT</version>
	<packaging>maven-plugin</packaging>

	<name>Maven SCR Plugin</name>
	<description>
		Maven plugin for generating OSGi service descriptors based on annotations.
	</description>

	<scm>
		<connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/scrplugin</connection>
		<developerConnection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/scrplugin</developerConnection>
		<url>http://svn.apache.org/repos/asf/felix/scrplugin</url>
	</scm>

	<dependencies>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.osgi.core</artifactId>
			<version>1.0.0</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.osgi.compendium</artifactId>
			<version>1.0.0</version>
			<scope>compile</scope>
			<exclusions>
			  <!-- exclude foundation jar, conflicts with JDK 1.5 library classes -->
			  <exclusion>
			    <groupId>org.apache.felix</groupId>
			    <artifactId>org.osgi.foundation</artifactId>
			  </exclusion>
			</exclusions>
		</dependency>
		
		<dependency>
		    <groupId>asm</groupId>
		    <artifactId>asm-all</artifactId>
		    <version>3.1</version>
		</dependency>

		<dependency>
		    <groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>1.4</version>
		</dependency>

		<dependency>
			<groupId>org.apache.maven</groupId>
			<artifactId>maven-plugin-api</artifactId>
			<version>2.0.7</version>
		</dependency>

		<dependency>
			<groupId>org.apache.maven</groupId>
			<artifactId>maven-archiver</artifactId>
			<version>2.2</version>
		</dependency>

		<dependency>
			<groupId>com.thoughtworks.qdox</groupId>
			<artifactId>qdox</artifactId>
			<version>1.9.1</version>
		</dependency>

    <!-- Logging support -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.4.3</version>
        </dependency>
        
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.scr.annotations</artifactId>
			<version>0.9.0</version>
		</dependency>
		
	</dependencies>
	
	<build>
		<plugins>

		  <!-- JDK 1.5 needed for annotation support -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
				  <source>1.5</source>
				  <target>1.5</target>
				</configuration>
			</plugin>
			
		</plugins>
  </build>
	
</project>
