<!-- 
 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</artifactId>
        <groupId>org.apache.felix</groupId>
        <version>1.0.4</version>
    </parent>

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

	<version>1.0.11-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>
		</dependency>
		
		<dependency>
		   <groupId>asm</groupId>
		   <artifactId>asm-all</artifactId>
		   <version>3.0</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</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>
	</dependencies>
</project>
