<?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>
    <format>dir</format>
  </formats>
  
    <includeBaseDirectory>true</includeBaseDirectory>
	<baseDirectory>/apache-opennlp-morfologik-addon-${project.version}</baseDirectory>
  
	<dependencySets>
		<dependencySet>
			<scope>runtime</scope>
			<unpack>false</unpack>
			<useProjectArtifact>false</useProjectArtifact>
			<fileMode>644</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>lib</outputDirectory>
			<useTransitiveDependencies>true</useTransitiveDependencies>
		</dependencySet>
	</dependencySets>
	
	<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>
