<!--
   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>
	<groupId>org.apache.uima</groupId>
	<artifactId>uima-as-distr</artifactId>
	<packaging>jar</packaging>
	<version>2.3.0-incubating</version> <!-- this comment is a flag for changeVersion -->
	<name>Apache UIMA Asynchronous Scaleout - Resources and Assembly Descriptor for building the distribution</name>
	<parent>
		<groupId>org.apache.uima</groupId>
		<artifactId>uima-common-distribution</artifactId>
		<version>2.3.0-incubating</version> <!-- this comment is a flag for changeVersion -->
      <relativePath>../uimaj/distr-superPom</relativePath>
	</parent>
  
  <properties>
    <uimaj-as-release-version>2.3.0-incubating</uimaj-as-release-version> <!-- this comment is a flag for changeVersion -->
    <uimaj-as-release-eclipse-version>2.3.0.incubating</uimaj-as-release-eclipse-version> <!-- this comment is a flag for changeVersion -->

    <!-- property used in multiple places in distr-superPom -->
    <assemblyFinalName>uima-as-${uimaj-release-version}</assemblyFinalName>
  </properties>
  
  <!-- dependencies used during assembly -->
	<dependencies>
    <!-- uima base -->
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-adapter-vinci</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-adapter-soap</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-cpe</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-examples</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-tools</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-configurator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-debug</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-jcasgen</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-pear-packager</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-runtime</artifactId>
    </dependency>
    
    <!-- uima-as -->
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-as-core</artifactId>
      <version>${uimaj-as-release-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-as-activemq</artifactId>
      <version>${uimaj-as-release-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-as-jms</artifactId>
      <version>${uimaj-as-release-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-as-camel</artifactId>
      <version>${uimaj-as-release-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-deployeditor</artifactId>
      <version>${uimaj-as-release-eclipse-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-runtime-deployeditor</artifactId>
      <version>${uimaj-as-release-eclipse-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-as-osgi-runtime</artifactId>
      <version>${uimaj-as-release-eclipse-version}</version>
    </dependency>
    
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-test-util</artifactId>
      <version>${uimaj-release-version}</version>
    </dependency>
    
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.1</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.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>
    </dependency> 
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>apache-activemq</artifactId>
      <version>4.1.1</version>
    </dependency> 
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-optional</artifactId>
      <version>4.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jms_1.1_spec</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
      <version>1.0</version>
    </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>com.thoughtworks.xstream</groupId>
      <artifactId>xstream</artifactId>
      <version>1.2.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-console</artifactId>
      <version>4.1.1</version>
    </dependency>
  
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activeio-core</artifactId>
      <version>3.0.0-incubator</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>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.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>
    
    <!--dependency>
      <groupId>net.sf.saxon</groupId>
      <artifactId>saxon</artifactId>
      <version>8.7</version>
    </dependency-->
    
	</dependencies>
    
	<build>
    <resources/>
		<plugins>
      
      <!-- This java doc config is for building the ones distributed with the bin packaging, and also 
           posted on our website.
        
           There is another javadoc config in the parent POM that builds all the java docs - intended
           for use by developers (currently not used) -->
      
			<plugin>
				<artifactId>maven-javadoc-plugin</artifactId>
				<executions>
					<execution>
						<id>javadoc</id>
						<phase>package</phase>
            <!--phase>deploy</phase-->   <!-- comment above and uncomment to disable javadocs, for testing/experimentation, with assembly:assembly-->
						<goals>
							<goal>javadoc</goal>
						</goals>
						<configuration>
              <!--quiet>true</quiet-->
              <!-- needs to be 5 to process enums -->
							<groups>
								<group>
									<title>Packages</title>
									<packages>*</packages>
								</group>
							</groups>
              <!--verbose>true</verbose-->
							<sourcepath>
                ../uimaj-as-core/src/main/java:../uimaj-as-activemq/src/main/java:../uimaj-as-camel/src/main/java:../uima-as-jms/src/main/java
              </sourcepath>
              <subpackages>org.apache.uima</subpackages>
							<excludePackageNames>
                *.uima.aae:
                *.aae.controller:
                *.aae.deploymentDescriptor:
                *.aae.error:
                *.aae.error.handler:
                *.aae.handler:
                *.aae.handler.input:
                *.aae.jmx:
                *.aae.message:
                *.aae.monitor:
                *.aae.monitor.statistics
              </excludePackageNames>
							<!-- add a few classes in impl packages that are directly used by user code -->
              <additionalparam>
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/monitor/BasicUimaJmxMonitorListener.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/monitor/JmxMonitorListener.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/monitor/ServiceMetrics.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/monitor/SingleLineUimaJmxMonitorListener.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/client/UimaAsynchronousEngine.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/client/UimaASStatusCallbackListener.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/client/UimaASProcessStatus.java                                                                                     
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/error/ErrorResult.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/error/ErrorResultComponentPath.java
                ${basedir}/../uimaj-as-core/src/main/java/org/apache/uima/aae/error/ErrorResultTDs.java
              </additionalparam>
							<doctitle>Apache UIMA Async Scaleout Java SDK ${pom.version} User-Level API Documentation</doctitle>
							<windowtitle>Apache UIMA-AS Java SDK ${pom.version} User-Level API Documentation</windowtitle>
						</configuration>
					</execution>
				</executions>
			</plugin>

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        
        <executions>
          <execution>
            <id>build uima-as docbooks</id>
            <phase>package</phase>
            <goals><goal>run</goal></goals>
            <configuration>
              <tasks>
                <!-- Build documentation -->
                <ant dir="../uima-as-docbooks" inheritAll="false"/>
              </tasks>
            </configuration>            
          </execution>          
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
      </plugin>
      
      <!-- run Release Audit Tool (RAT) on src and bin distrs -->       
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <executions>
          <execution>
            <id>rat-check-src</id>
            <configuration>
              <basedir>target/rat-src-dir/apache-uima-as</basedir>              
              <excludes>
                <exclude>uima-as-distr/src/test/resources/deploy/expected/*.*</exclude> <!-- test data -->
                <exclude>uima-as-distr/src/test/resources/deploy/expected/envVar/*.*</exclude> <!-- test data -->
                <exclude>uima-as-docbooks/src/olink/**</exclude> <!-- generated cross ref database for Apache FOP -->
                <exclude>uima-docbooks/src/olink/**</exclude> <!-- generated cross ref database for Apache FOP -->
                <exclude>uimaj-as-activemq/src/test/resources/data/DoubleByteText.txt</exclude> <!-- test data -->
              </excludes>
            </configuration>
          </execution>
          <execution>
            <id>rat-check-bin</id>
            <configuration>
              <excludes>
                <exclude>uima-as/docs/api/**</exclude> <!-- javadocs-->
                <exclude>uima-as/docs/html/images/*.svg</exclude>  <!-- generated .svg image files -->
              </excludes>
            </configuration>
          </execution>  
        </executions>
      </plugin>

		</plugins>
	</build>	
</project>