<?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/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <parent>
  <groupId>org.apache.camel</groupId>
  <artifactId>components</artifactId>
  <version>2.22.3</version>
 </parent>

 <artifactId>camel-yammer</artifactId>
 <packaging>jar</packaging>
 <name>Camel :: Yammer</name>
 <description>Camel Yammer Component</description>

 <properties>
  <camel.osgi.export.pkg>org.apache.camel.component.yammer.*</camel.osgi.export.pkg>
  <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=yammer</camel.osgi.export.service>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.apache.camel</groupId>
   <artifactId>camel-core</artifactId>
  </dependency>

  <dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-mapper-asl</artifactId>
   <version>${jackson-version}</version>
  </dependency>

  <dependency>
   <groupId>org.scribe</groupId>
   <artifactId>scribe</artifactId>
   <version>${scribe-version}</version>
  </dependency>  
  
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <scope>test</scope>
  </dependency>
  
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <scope>test</scope>
  </dependency>
  
  <dependency>
   <groupId>org.apache.camel</groupId>
   <artifactId>camel-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>
</project>
