  <!--
   ***************************************************************
   * 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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>parent-pom-ibm-notice</artifactId>
    <version>1-SNAPSHOT</version>
    <relativePath/>
  </parent>
  
	<artifactId>uimaj-as-activemq</artifactId>
	<version>2.3.1-SNAPSHOT</version>
	<name>UIMA-AS: ${project.artifactId}</name>
  <description>UIMA-AS ActiveMQ incorporation</description>
  <url>${uimaWebsiteUrl}</url>

  <!-- 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/${uimaScmRoot}/trunk/${uimaScmProject}
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/trunk/${uimaScmProject}
    </developerConnection>
    <url>
      http://svn.apache.org/viewvc/uima/${uimaScmRoot}/trunk/${uimaScmProject}
    </url>
  </scm>
  
  <properties>
    <uimaScmRoot>uimaj</uimaScmRoot>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
    <uimaDependencyVersion>2.3.1-SNAPSHOT</uimaDependencyVersion>
  </properties>

	<dependencies>
		
	<!--dependency>
    	<groupId>commons-pool</groupId>
    	<artifactId>commons-pool</artifactId>
    	<version>1.2</version>
		<scope>compile</scope>
	</dependency--> 
		
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-core</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
			<version>2.0.6</version>
		</dependency> 

		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>apache-activemq</artifactId>
			<version>4.1.1</version>
			<exclusions>
          <!-- exclude xstream 1.1.2 because it is broken 
               xstream 1.2.2 (the fixed version) is included in another pom -->
        <!--exclusion>
          <groupId>xstream</groupId>
          <artifactId>xstream</artifactId>
        </exclusion-->
      </exclusions>		
		</dependency> 

		<!--dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-core</artifactId>
			<version>4.1.1</version>
			<exclusions>
                    <exclusion>
                        <groupId>org.apache.activemq</groupId>
                        <artifactId>activemq-core</artifactId>
                    </exclusion>
           </exclusions>
		</dependency-->

		<!--dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-optional</artifactId>
			<version>4.1.1</version>
			<exclusions>
                    <exclusion>
                        <groupId>org.apache.activemq</groupId>
                        <artifactId>activemq-optional</artifactId>
                    </exclusion>
           </exclusions>
		</dependency-->

		<!--dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activeio-core</artifactId>
			<version>3.0.0-incubator</version>
		</dependency-->

		<!--dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-console</artifactId>
			<version>4.1.1</version>
		</dependency-->

		<!--dependency>
			<groupId>backport-util-concurrent</groupId>
			<artifactId>backport-util-concurrent</artifactId>
			<version>2.1</version>
		</dependency-->

		<!--dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-jaas</artifactId>
			<version>4.1.1</version>
		</dependency-->

		<!--dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-web</artifactId>
			<version>4.1.1</version>
		</dependency-->    

		<dependency>
			<groupId>mx4j</groupId>
			<artifactId>mx4j</artifactId>
			<version>2.1.1</version>
		</dependency>

   <!-- lib/optional -->

	<!--dependency>
		<groupId>commons-beanutils</groupId>
		<artifactId>commons-beanutils</artifactId>
		<version>1.6.1</version>
	</dependency-->
	
	<!--dependency>
		<groupId>commons-collections</groupId>
		<artifactId>commons-collections</artifactId>
		<version>2.1</version>
	</dependency-->

	<!--dependency>
		<groupId>commons-dbcp</groupId>
		<artifactId>commons-dbcp</artifactId>
		<version>1.2</version>
	</dependency-->

	<!--dependency>
		<groupId>commons-pool</groupId>
		<artifactId>commons-pool</artifactId>
		<version>1.2</version>
	</dependency-->

    <!--dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
    </dependency-->

	<!--dependency>
		<groupId>org.apache.geronimo.specs</groupId>
		<artifactId>geronimo-j2ee-connector_1.5_spec</artifactId>
		<version>1.0</version>
	</dependency-->

	<!--dependency>
		<groupId>org.apache.geronimo.specs</groupId>
		<artifactId>geronimo-j2ee-jacc_1.0_spec</artifactId>
		<version>1.0</version>
	</dependency-->

	<!--dependency>
		<groupId>activemq</groupId>
		<artifactId>jmdns</artifactId>
		<version>1.0-RC2</version>
	</dependency-->

	<!--dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.12</version>
	</dependency-->

	<dependency>
		<groupId>mx4j</groupId>
		<artifactId>mx4j-remote</artifactId>
		<version>2.1.1</version>
	</dependency>

	<!--dependency>
		<groupId>mx4j</groupId>
		<artifactId>mx4j-tools</artifactId>
		<version>2.1.1</version>
	</dependency-->


		<dependency>
		    <groupId>org.apache.uima</groupId>
		    <artifactId>uimaj-as-core</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
		    <groupId>org.apache.uima</groupId>
		    <artifactId>uimaj-as-jms</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>
		
		<!--dependency>
			<groupId>commons-httpclient</groupId>
			<artifactId>commons-httpclient</artifactId>
			<version>2.0.1</version>
		</dependency--> 

		<!--dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>jetty</artifactId>
			<version>6.0.1</version>
		</dependency> 

		<dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>jetty-util</artifactId>
			<version>6.0.1</version>
		</dependency>

		<dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>servlet-api-2.5</artifactId>
			<version>6.0.1</version>
		</dependency-->
		
		<!--dependency>
			<groupId>xmlpull</groupId>
			<artifactId>xmlpull</artifactId>
			<version>1.1.3.4d_b4_min</version>
		</dependency--> 
	
	
		<!--dependency>
			<groupId>org.apache.derby</groupId>
			<artifactId>derby</artifactId>
			<version>10.1.1.0</version>
		</dependency-->
	
		<!--dependency>
			<groupId>org.apache.xbean</groupId>
			<artifactId>xbean-spring</artifactId>
			<version>2.8</version>
		</dependency-->

    <!-- testing dependencies -->
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-examples</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
		
    <!--dependency>
      <groupId>com.thoughtworks.xstream</groupId>
      <artifactId>xstream</artifactId>
      <version>1.2.2</version>
      <scope>test</scope>
    </dependency-->
    
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-test-util</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>

	</dependencies>
	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
      <!-- This plugin makes the tests run by
             - giving more memory to them, and
             - eliminating the very slow integration test -->
		  <plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<argLine>-Xmx300M</argLine>
					<includes>
					   <include>**/TestUimaASBasic.java</include>
					</includes>
				</configuration>
		  </plugin>
      
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              <excludes>
                <exclude>src/test/resources/data/DoubleByteText.txt</exclude> <!-- test data -->
              </excludes>              
            </configuration>
          </execution>
        </executions>
      </plugin>   
      		
	  </plugins>		
	</build>	
</project>