<?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>
        <!-- libs are handled with dependencies because exclude don't work too well bellow -->
        <!-- if some deps are missing, they should be added as project dependencies -->
        <include>lib/*.jar</include>
      </includes>
      <excludes>
        <exclude>%regex[(WEB-INF/)?lib/(tomee-)?myfaces(-api|-impl)?-.*.jar]</exclude>
      </excludes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <scope>runtime</scope>
      <useTransitiveDependencies>true</useTransitiveDependencies>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <excludes>
        <!-- provided -->
        <exclude>org.apache.tomcat:*</exclude>
        <exclude>org.apache.myfaces:*</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>

