## ---------------------------------------------------------------------------
## 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.
## ---------------------------------------------------------------------------

# This file contains additional dependencies needed by camel modules in a spring-boot deployment
# Use comma-separated values to include multiple dependencies

# Global dependencies included in all modules (except the ones in the list)
global=org.apache.camel.springboot:camel-core-starter

# we need spring-boot in camel-core-starter
camel-core=org.apache.camel.springboot:camel-spring-boot
camel-core-engine=org.apache.camel.springboot:camel-spring-boot

camel-cassandraql=com.datastax.oss:java-driver-core:${cassandra-driver-version},com.datastax.oss:java-driver-query-builder:${cassandra-driver-version}

camel-github=org.eclipse.mylyn.github:org.eclipse.egit.github.core:${egit-github-core-version}
camel-guava-eventbus=com.google.guava:guava:${guava-eventbus-version}

# Defaulting to netty in the starter
camel-hl7=org.apache.camel:camel-netty:${camel-version}

camel-jbpm=org.apache.geronimo.specs:geronimo-jms_1.1_spec
camel-jms=org.apache.geronimo.specs:geronimo-jms_1.1_spec
camel-jpa=org.apache.geronimo.specs:geronimo-jpa_2.1_spec

camel-sjms=org.apache.geronimo.specs:geronimo-jms_1.1_spec
camel-sjms2=org.apache.geronimo.specs:geronimo-jms_2.0_spec
camel-spring-boot=org.apache.camel.springboot:camel-core-starter
camel-spring-boot-xml=org.apache.camel.springboot:camel-core-starter
camel-spring-ws=org.springframework.boot:spring-boot-starter-web:${spring-boot-version}

# Force the spring-boot version of jetty
camel-salesforce=org.eclipse.jetty:jetty-client:${jetty9-version},org.eclipse.jetty:jetty-util:${jetty9-version},org.eclipse.jetty:jetty-util-ajax:${jetty9-version},org.eclipse.jetty:jetty-io:${jetty9-version}

# Existed for Netty 3
exclude_camel-hbase=io.netty:netty
