<?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.

-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<artifactId>ctakes-dependency-parser</artifactId>
	<name>Apache cTAKES Dependency Parser</name>
	<description>This wraps the ClearNLP dependency parser and semantic role labeler into a UIMA friendly annotator</description>
	<parent>
		<groupId>org.apache.ctakes</groupId>
		<artifactId>ctakes</artifactId>
		<version>5.0.0-SNAPSHOT</version>
	</parent>
	<dependencies>
      <dependency>
			<groupId>org.apache.ctakes</groupId>
			<artifactId>ctakes-dependency-parser-models</artifactId>
			<version>${ctakes.models.version}</version>
		</dependency>
<!--   ctakes-dependency-parser-clear  is a large model, not used by default in ctakes.
			If you need to use it then uncomment the dependency declaration below.   -->
<!--      <dependency>
         <groupId>org.apache.ctakes</groupId>
         <artifactId>ctakes-dependency-parser-models-clear</artifactId>
      </dependency>
-->	  
		<dependency>
			<groupId>org.apache.ctakes</groupId>
			<artifactId>ctakes-pos-tagger</artifactId>
		</dependency>
		<dependency>
			<groupId>args4j</groupId>
			<artifactId>args4j</artifactId>
		</dependency>
        <!--  TODO where is hppc actually used?  -->
		<dependency>
			<groupId>com.carrotsearch</groupId>
			<artifactId>hppc</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>unpack-models</id>
						<phase>process-resources</phase>
						<goals>
							<goal>unpack-dependencies</goal>
						</goals>
						<configuration>
<!--							<includeArtifactIds>ctakes-dependency-parser-models,ctakes-dependency-parser-models-clear</includeArtifactIds>-->
							<includeArtifactIds>ctakes-dependency-parser-models</includeArtifactIds>
							<excludes>**/META-INF/**</excludes>
							<outputDirectory>${project.basedir}/../resources</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

</project>
