<?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.
-->

<!-- $Rev: 576067 $ $Date: 2007-09-16 03:17:08 -0700 (Sun, 16 Sep 2007) $ -->

<assembly>
  <id>war</id>
  <formats>
    <format>war</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>target/maven-shared-archive-resources</directory>
      <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.basedir}</directory>
      <includes>
        <include>README.txt</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${project.basedir}/src/main/webapp</directory>
      <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.basedir}/target/classes</directory>
      <outputDirectory>/</outputDirectory>
      <excludes>
        <exclude>org/**</exclude>
        <exclude>META-INF/LICENSE</exclude>
        <exclude>META-INF/NOTICE</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>${project.basedir}/target/classes</directory>
      <outputDirectory>WEB-INF/classes</outputDirectory>
      <excludes>
        <exclude>META-INF/LICENSE</exclude>
        <exclude>META-INF/NOTICE</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}/${project.artifactId}-${project.version}/</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>WEB-INF/web.xml</include>
        <include>WEB-INF/classes/**</include>
        <include>**/*.html</include>
        <include>**/*.css</include>
        <include>**/*.js</include>
        <include>lib/*.jar</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <scope>runtime</scope>
      <useTransitiveDependencies>true</useTransitiveDependencies>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <excludes>
        <!-- provided -->
        <exclude>org.apache.tomcat:*</exclude>

        <!-- should be in a pom exclusion but it does perfectly the trick -->
        <exclude>org.springframework:*</exclude>

        <exclude>*:jakarta.jws-api:*</exclude>
        <exclude>*:jakarta.xml.bind-api:*</exclude>
        <exclude>*:jakarta.xml.ws-api:*</exclude>

        <!-- wars and pom -->
        <exclude>*:war</exclude>
        <exclude>*:pom</exclude>
        <exclude>org.apache.geronimo.specs:geronimo-javamail_1.5_spec</exclude>
        <exclude>org.apache.geronimo.javamail:geronimo-javamail_1.5_mail</exclude>
        <exclude>org.apache.geronimo.specs:geronimo-javamail_1.4_spec</exclude>
        <exclude>org.apache.geronimo.javamail:geronimo-javamail_1.4_mail</exclude>

        <!--
        list bellow should not be required because Maven should exclude them but looks like sometimes
        it picks up transitive dependencies from shaded libraries
        -->
        <!-- exclude shaded artifacts because they are under our own groupId -->
        <exclude>org.apache.commons.dbcp2:*</exclude>
        <exclude>org.metatype.sxc:*</exclude>
        <exclude>org.apache.taglibs:*</exclude>

        <!-- jakartaee-api -->
        <exclude>com.sun.mail:*</exclude>
        <exclude>jakarta.activation:*</exclude>
        <exclude>jakarta.annotation:*</exclude>
        <exclude>jakarta.authentication:*</exclude>
        <exclude>jakarta.authorization:*</exclude>
        <exclude>jakarta.batch:*</exclude>
        <exclude>jakarta.ejb:*</exclude>
        <exclude>jakarta.el:*</exclude>
        <exclude>jakarta.enterprise:*</exclude>
        <exclude>jakarta.enterprise.concurrent:*</exclude>
        <exclude>jakarta.faces:*</exclude>
        <exclude>jakarta.inject:*</exclude>
        <exclude>jakarta.interceptor:*</exclude>
        <exclude>jakarta.jms:*</exclude>
        <exclude>jakarta.json:*</exclude>
        <exclude>jakarta.json.bind:*</exclude>
        <exclude>jakarta.jws:*</exclude>
        <exclude>jakarta.mail:*</exclude>
        <exclude>jakarta.persistence:*</exclude>
        <exclude>jakarta.platform:*</exclude>
        <exclude>jakarta.resource:*</exclude>
        <exclude>jakarta.security.enterprise:*</exclude>
        <exclude>jakarta.servlet:*</exclude>
        <exclude>jakarta.servlet.jsp:*</exclude>
        <exclude>jakarta.servlet.jsp.jstl:*</exclude>
        <exclude>jakarta.transaction:*</exclude>
        <exclude>jakarta.validation:*</exclude>
        <exclude>jakarta.websocket:*</exclude>
        <exclude>jakarta.ws.rs:*</exclude>
        <exclude>jakarta.xml.bind:*</exclude>
        <exclude>jakarta.xml.soap:*</exclude>
      </excludes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>WEB-INF/lib</outputDirectory>
      <scope>runtime</scope>
      <useTransitiveDependencies>true</useTransitiveDependencies>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <includes>
        <include>org.apache.tomee:tomee-loader</include>
        <include>org.codehaus.swizzle:swizzle-stream</include>
      </includes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>WEB-INF/lib</outputDirectory>
      <scope>compile</scope>
      <includes>
        <include>org.apache.tomee:tomee-common</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>

