<?xml version="1.0"?>
<!--
  ~ 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>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.ode</groupId>
    <artifactId>ode-jacob</artifactId>
    <packaging>jar</packaging>
    <name>ODE :: Java Concurrent Objects (JACOB)</name>
    <parent>
        <groupId>org.apache.ode</groupId>
        <artifactId>ode</artifactId>
        <version>1.4-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.apache.ode</groupId>
            <artifactId>ode-utils</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
         <!-- uncomment it for @ChannelType classes regeneration -->
         <!--plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>apt-maven-plugin</artifactId>
			<version>1.0-alpha-3</version>
			<configuration>
			  <factory>org.apache.ode.jacob.ap.JacobAnnotationProcessorFactory</factory>
			  <outputDirectory>src/main/java</outputDirectory>
			</configuration>
			<executions>
			   <execution>
			    <goals>
			       <goal>process</goal>
			       <goal>test-process</goal>
			    </goals>
			   </execution>
		        </executions>
			<dependencies>
			   <dependency>
			      <groupId>org.apache.ode</groupId>
			      <artifactId>ode-jacob-ap</artifactId>
			      <version>${project.version}</version>
			   </dependency>
			 </dependencies>
            </plugin-->
        </plugins>
    </build>
</project>
