<?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>bin</id>
  <formats>
    <format>tar.gz</format>
    <format>zip</format>
  </formats>
  
    <includeBaseDirectory>true</includeBaseDirectory>
	<baseDirectory>/apache-opennlp-morfologik-addon-${project.version}</baseDirectory>
  
	
	<fileSets>
	    <fileSet>
	    	<directory>src/main/readme</directory>
	    	<outputDirectory></outputDirectory>
	    	<fileMode>644</fileMode>
	    	<directoryMode>755</directoryMode>      
	    </fileSet>
		
	    <fileSet>
	      <directory>.</directory>
	      <outputDirectory></outputDirectory>
	      <filtered>true</filtered>
	      <fileMode>644</fileMode>
	      <directoryMode>755</directoryMode> 
	      <includes>
	        <include>README</include>
	        <include>RELEASE_NOTES.html</include>
	      </includes>       
	    </fileSet>
	    
	    <fileSet>
	      <directory>target</directory>
	      <outputDirectory></outputDirectory>
	      <fileMode>644</fileMode>
	      <directoryMode>755</directoryMode> 
	      <includes>
	        <include>issuesFixed/**</include>      
	      </includes>       
	    </fileSet>
	    
		<fileSet>
			<directory>src/main/bin</directory>
			<fileMode>755</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>bin</outputDirectory>
		</fileSet>
		
		  <fileSet>
		    <directory>target</directory>
		    <outputDirectory>lib</outputDirectory>
		    <includes>
		      <include>morfologik-addon-*.jar</include>
		    </includes>
		  </fileSet>
		
	</fileSets>
</assembly>
