<?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>
	<parent>
		<artifactId>uima-ducc-parent</artifactId>
		<groupId>org.apache.uima</groupId>
		<version>2.1.0</version>
		<relativePath>../uima-ducc-parent/pom.xml</relativePath>
	</parent>

	<!-- Inherits groupid and version from the parent pom project coordinates -->
	<!-- Uses default packaging ie. jar -->
	<artifactId>uima-ducc-container</artifactId>
	<name>${uima.ducc} ${project.artifactId}</name>

	<!-- Special inheritance note even though the <scm> element that follows 
		is exactly the same as those in super poms, it cannot be inherited because 
		there is some special code that computes the connection elements from the 
		chain of parent poms, if this is omitted. Keeping this a bit factored allows 
		cutting/pasting the <scm> element, and just changing the following two properties -->
	<scm>
		<connection>
      scm:svn:http://svn.apache.org/repos/asf/uima/uima-ducc/tags/uima-ducc-2.1.0/uima-ducc-container
    </connection>
		<developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/uima-ducc/tags/uima-ducc-2.1.0/uima-ducc-container
    </developerConnection>
		<url>
      http://svn.apache.org/viewvc/uima/uima-ducc/tags/uima-ducc-2.1.0/uima-ducc-container
    </url>
	</scm>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.apache.uima</groupId>
				<artifactId>uima-ducc-user</artifactId>
				<version>${project.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<!-- Dependencies on other DUCC projects -->
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uima-ducc-common</artifactId>
		</dependency>


		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uima-ducc-user</artifactId>
		</dependency>
	</dependencies>
    <profiles>
	<profile>
	   <id>run-junit-tests</id>	
	   <activation>
	      <!-- Execute the plugins if -DskipTests is not defined -->
	      <property><name>!skipTests</name></property>
	   </activation>
       
  	   <build>
		<pluginManagement>
		   <plugins>
		      <plugin>
               <groupId>org.eclipse.m2e</groupId>
               <artifactId>lifecycle-mapping</artifactId>
               <version>1.0.0</version>
				<configuration>
				    <lifecycleMappingMetadata>
				       <pluginExecutions>
				          <pluginExecution>
				             <pluginExecutionFilter>
				                <groupId>org.apache.uima</groupId>
                                <artifactId>uima-build-helper-maven-plugin</artifactId>
				                <versionRange>[5,)</versionRange>
				                <goals>
				                   <goal>copy-from-apache-dist</goal>
				                </goals>   
				             
				             </pluginExecutionFilter>
				             <action>
				                 <ignore />
				             </action>    
				          </pluginExecution>
				          
				          <pluginExecution>
				             <pluginExecutionFilter>
				                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-dependency-plugin</artifactId>
				                <versionRange>[2.3,)</versionRange>
				                <goals>
				                   <goal>copy</goal>
				                </goals>   
				             
				             </pluginExecutionFilter>
				             <action>
				                 <ignore />
				             </action>    
				          </pluginExecution>
				       </pluginExecutions>
				    </lifecycleMappingMetadata>
				</configuration>		      
		      </plugin>
		   </plugins>
		</pluginManagement>
		<plugins>


			<plugin>
			
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
          
                    <execution>
                      <!-- use the dependency:copy goal to copy jars for junit testing -->
                      <id>copy jars</id>
                      <phase>process-test-resources</phase>
                      <goals><goal>copy</goal></goals>
                      <configuration>
                        <overWriteIfNewer>true</overWriteIfNewer>
                        <artifactItems>
                          <artifactItem>
							<groupId>org.apache.uima</groupId>
							<artifactId>uima-ducc-user</artifactId>
                            <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                          </artifactItem>
                          <artifactItem>
							<groupId>org.apache.uima</groupId>
							<artifactId>uimaj-core</artifactId>
                            <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                          </artifactItem>
                          <artifactItem>
							<groupId>org.apache.uima</groupId>
							<artifactId>uimaj-as-core</artifactId>
                            <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                          </artifactItem>
                          <artifactItem>
							<groupId>org.springframework</groupId>
							<artifactId>spring-core</artifactId>
                            <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                          </artifactItem>
                          <artifactItem>
							<groupId>org.apache.xmlbeans</groupId>
							<artifactId>xmlbeans</artifactId>
                            <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                          </artifactItem>
                          <artifactItem>
                            <groupId>com.thoughtworks.xstream</groupId>
                            <artifactId>xstream</artifactId>
                            <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                          </artifactItem>

                        </artifactItems>
                      </configuration>
                    </execution>                    
                    
                    </executions>
                    </plugin>
                    
		</plugins>
		
	</build>
   </profile>
   </profiles>		

</project>
