<?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>java5-parent</artifactId>
        <version>1.0.0</version>
        <relativePath />
    </parent>
   
    <groupId>org.apache.aries.jndi</groupId>
    <artifactId>org.apache.aries.jndi.url.itest.web</artifactId>
    <name>Apache Aries JNDI Test Bundle for Aries jndi-url iTests</name>
    <version>1.0.0</version>
    <packaging>bundle</packaging>
    
     <scm>
         <connection>scm:svn:http://svn.apache.org/repos/asf/aries/tags/org.apache.aries.jndi.url.itest.web-1.0.0</connection>
         <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/tags/org.apache.aries.jndi.url.itest.web-1.0.0</developerConnection>
         <url>http://svn.apache.org/viewvc/aries/tags/org.apache.aries.jndi.url.itest.web-1.0.0</url>
     </scm>

     <properties>
     <aries.osgi.private.pkg>
        org.apache.aries.jndiurl.itest,
        org.apache.aries.jndiurl.itest.beans
     </aries.osgi.private.pkg>
     <aries.osgi.import.pkg>
        javax.servlet*;version=2.5,
        *
     </aries.osgi.import.pkg>
     <aries.osgi.export.pkg />
     </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.5_spec</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
              <groupId>org.apache.felix</groupId>
              <artifactId>maven-bundle-plugin</artifactId>
              <configuration>
                <instructions>
                  <Web-ContextPath>/jndiUrlItest</Web-ContextPath>
                </instructions>
              </configuration>
            </plugin>
        </plugins>
    </build>
</project>
