<?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.
-->
<assembly>
	<id>dist</id>
	<formats>
		<format>tar.gz</format>
		<format>tar.bz2</format>
		<format>zip</format>
	</formats>
	<includeBaseDirectory>true</includeBaseDirectory>
	<fileSets>
		<fileSet>
			<directory>${basedir}/..</directory>
			<outputDirectory>src</outputDirectory>
			<useDefaultExcludes>true</useDefaultExcludes>
			<includes>
				<include>pom.xml</include>
				<include>empire-assembly-all.xml</include>
				<include>empire-db/**</include>
				<include>empire-db-jsf2/**</include>
				<include>empire-db-maven-plugin/**</include>
				<include>empire-db-codegen/**</include>
				<include>empire-db-spring/**</include>
				<include>empire-db-struts2/**</include>
				<include>empire-db-examples/**</include>
			</includes>
			<excludes>
				<exclude>**/empire-db/target/**</exclude>
				<exclude>**/empire-db-*/target/**</exclude>			
				<exclude>**/.classpath/**</exclude>
				<exclude>**/.project/**</exclude>
				<exclude>**/.settings/**</exclude>
				<exclude>**/.amateras/**</exclude>
				<exclude>**/.tomcatplugin/**</exclude>
				<exclude>**/.idea/**</exclude>
				<exclude>**/empire-db-example-vue/src/main/vue/node_modules/**</exclude>
				<exclude>empire-db-examples/tutorial.pdf</exclude>
			</excludes>
		</fileSet>
		<fileSet>
			<directory>${basedir}/..</directory>
			<outputDirectory/>
			<useDefaultExcludes>true</useDefaultExcludes>
			<includes>
				<include>LICENSE.txt</include>
				<include>NOTICE.txt</include>
				<include>README.txt</include>
				<include>CHANGELOG.txt</include>
				<!-- <include>licenses/**</include> -->
			</includes>
		</fileSet>
		<fileSet>
			<directory>${basedir}/../empire-db-examples</directory>
			<outputDirectory/>
			<includes>
				<include>tutorial.pdf</include>
			</includes>
		</fileSet>
	</fileSets>
	<dependencySets>
		<dependencySet>
			<outputDirectory>doc</outputDirectory>
			<!-- <unpack>true</unpack> -->
			<useStrictFiltering>true</useStrictFiltering>
			<includes>
				<include>org.apache.empire-db:empire-db:*:javadoc</include>
				<include>org.apache.empire-db:empire-db-struts2:*:javadoc</include>
				<include>org.apache.empire-db:empire-db-jsf2:*:javadoc</include>
				<include>org.apache.empire-db:empire-db-spring:*:javadoc</include>
			</includes>
		</dependencySet>
		<dependencySet>
            <outputDirectory>bin</outputDirectory>
            <useStrictFiltering>true</useStrictFiltering>
            <includes>
                <include>org.apache.empire-db:empire-db:jar</include>
                <include>org.apache.empire-db:empire-db-struts2:jar</include>
                <include>org.apache.empire-db:empire-db-jsf2:jar</include>
				<include>org.apache.empire-db:empire-db-spring:jar</include>
            </includes>
			<excludes>
				<exclude>org.apache.empire-db:*:*:javadoc</exclude>
			</excludes>
        </dependencySet>
    </dependencySets>
</assembly>
