<?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
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<id>distribution</id>
	<formats>
		<format>zip</format>
	</formats>
	<fileSets>
		<fileSet>
			<directory>${project.parent.basedir}</directory>
			<includes>
				<include>LICENSE</include>
				<include>NOTICE</include>
				<include>*.xml</include>
				<include>*.txt</include>
				<include>*.md</include>
				<include>*.pdf</include>
			</includes>
			<excludes>
				<exclude>pom.xml</exclude>
			</excludes>
			<fileMode>0644</fileMode>
			<outputDirectory>.</outputDirectory>
		</fileSet>
		<fileSet>
			<directory>${project.parent.basedir}/taverna-server-webapp/target</directory>
			<includes>
				<include>*.war</include>
			</includes>
			<outputDirectory>.</outputDirectory>
			<fileMode>0644</fileMode>
		</fileSet>
	</fileSets>
</assembly>
