<?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.12-SNAPSHOT</version>
 </parent>

 <artifactId>camel-yammer</artifactId>
 <packaging>bundle</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.slf4j</groupId>
   <artifactId>slf4j-log4j12</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>
