<?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-similarity-${project.version}</baseDirectory>
  
	<dependencySets>
		<dependencySet>
			<includes>
				<include>org.apache.opennlp:opennlp-maxent</include>
				<include>org.apache.opennlp:opennlp-tools</include>
				<include>org.apache.opennlp:opennlp-uima</include>
				<include>jwnl:jwnl</include>
			</includes>
			<unpack>false</unpack>
			<useProjectArtifact>false</useProjectArtifact>
			<fileMode>644</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>lib</outputDirectory>
		</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>../opennlp-docs/target/docbkx/html</directory>
			<fileMode>644</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>docs/manual</outputDirectory>
		</fileSet>
		
		<fileSet>
			<directory>../opennlp-maxent/target/apidocs</directory>
			<fileMode>644</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>docs/apidocs/opennlp-maxent</outputDirectory>
		</fileSet>
		
		<fileSet>
			<directory>../opennlp-tools/target/apidocs</directory>
			<fileMode>644</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>docs/apidocs/opennlp-tools</outputDirectory>
		</fileSet>
		
		<fileSet>
			<directory>../opennlp-uima/target/apidocs</directory>
			<fileMode>644</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>docs/apidocs/opennlp-uima</outputDirectory>
		</fileSet>
		
		<fileSet>
			<directory>../opennlp-uima/descriptors</directory>
			<filtered>true</filtered>
			<fileMode>644</fileMode>
			<directoryMode>755</directoryMode>
			<outputDirectory>docs/opennlp-uima-descriptors</outputDirectory>
		</fileSet>
		
	</fileSets>
</assembly>