<?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>words</groupId>
    <artifactId>words</artifactId>
    <version>0.4-SNAPSHOT</version>
  </parent>

  <groupId>words</groupId>
  <artifactId>words-web</artifactId>
  <name>Apache Aries words demo web component</name>
  <packaging>bundle</packaging>

  <dependencies>
    <dependency>
      <groupId>words</groupId>
      <artifactId>words-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-servlet_2.5_spec</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>WebContent</directory>
        <excludes>
          <exclude>META-INF/MANIFEST.MF</exclude>
        </excludes>
      </resource>
    </resources>

    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <Import-Package>javax.servlet;version="2.5.0",
              javax.servlet.http;version="2.5.0",
              org.apache.words,javax.naming</Import-Package>
            <Private-Package>org.apache.words.web</Private-Package>
            <Web-ContextPath>/words-web</Web-ContextPath>
            <Web-JSPExtractLocation>/</Web-JSPExtractLocation>
          </instructions>
        </configuration>
      </plugin>

    </plugins>
  </build>
</project>
	
