<?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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.aries</groupId>
        <artifactId>parent</artifactId>
        <version>2.0.0</version>
        <relativePath>../../parent/pom.xml</relativePath>
    </parent>

    <groupId>org.apache.aries.jmx</groupId>
    <artifactId>org.apache.aries.jmx.core</artifactId>
    <packaging>bundle</packaging>
    <name>Apache Aries JMX Core</name>
    <version>1.1.3</version>
    <description>
        This bundle contains the core implementation 
		of the JMX Control specification
    </description>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/aries/tags/org.apache.aries.jmx.core-1.1.3</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/tags/org.apache.aries.jmx.core-1.1.3</developerConnection>
        <url>http://svn.apache.org/viewvc/aries/tags/org.apache.aries.jmx.core-1.1.3</url>
    </scm>

    <properties>
        <aries.osgi.activator>
            org.apache.aries.jmx.Activator
        </aries.osgi.activator>
        <aries.osgi.import>
            !org.apache.aries.jmx*,
            org.osgi.framework;version="[1.6,2)",
            org.osgi.service.cm;version="[1.4,2)";resolution:="optional",
            org.osgi.service.permissionadmin;version="[1.2,2)";resolution:="optional",
            org.osgi.service.provisioning;version="[1.2,2)";resolution:="optional",
            org.osgi.service.useradmin;version="[1.1,2)";resolution:="optional",
            org.osgi.util.tracker;version="[1.5,2)",
            org.osgi.jmx;version="[1.1,2)",
            org.osgi.jmx.framework;version="[1.7,1.8)",
            org.osgi.jmx.service.cm;version="[1.3,1.4)",
            org.osgi.jmx.service.permissionadmin;version="[1.2,1.3)",
            org.osgi.jmx.service.provisioning;version="[1.2,1.3)",
            org.osgi.jmx.service.useradmin;version="[1.1,1.2)",
            *
        </aries.osgi.import>
        <!-- Export package versions are maintained in packageinfo files -->

        <aries.osgi.export.pkg>
            org.apache.aries.jmx.codec
        </aries.osgi.export.pkg>
        <aries.osgi.private.pkg>
            org.apache.aries.jmx*
        </aries.osgi.private.pkg>
        <aries.osgi.import.service>
            javax.management.MBeanServer
        </aries.osgi.import.service>
        <lastReleaseVersion>1.1.1</lastReleaseVersion>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.aries.jmx</groupId>
            <artifactId>org.apache.aries.jmx.api</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.aries</groupId>
            <artifactId>org.apache.aries.util</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <scope>test</scope>
            <version>1.8.2</version>
        </dependency>
        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.aries.versioning</groupId>
                <artifactId>org.apache.aries.versioning.plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-verify</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>version-check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

 </project>
