<?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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.sling.ide</groupId>
    <artifactId>reactor</artifactId>
    <version>1.0.8</version>
  </parent>
  <artifactId>org.apache.sling.ide.impl-vlt</artifactId>
  <packaging>eclipse-plugin</packaging>
  <name>Sling IDE Tools: FileVault implementation</name>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/tooling/ide/impl-vlt</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/tooling/ide/impl-vlt</developerConnection>
    <url>http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt</url>
  </scm>
  
  <build>
    <!-- ensure that extra files are picked up by the maven-source-plugin -->
    <resources>
        <resource>
            <directory>.</directory>
            <includes>
                <include>build.properties</include>
                <include>META-INF/*</include>
                <include>OSGI-INF/*</include>
                <include>.options</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestFile>META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>        
    </plugins>
  </build>  
</project>
