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

#Apache ServiceMix specs
org.apache.servicemix.specs/org.apache.servicemix.specs.jaxb-api-2.1/${servicemix.specs.version}/jar
org.apache.servicemix.specs/org.apache.servicemix.specs.jaxb-api-2.0/${servicemix.specs.version}/jar
org.apache.servicemix.specs/org.apache.servicemix.specs.jaxws-api-2.1/${servicemix.specs.version}/jar
org.apache.servicemix.specs/org.apache.servicemix.specs.jaxws-api-2.0/${servicemix.specs.version}/jar
org.apache.servicemix.specs/org.apache.servicemix.specs.saaj-api-1.3/${servicemix.specs.version}/jar
org.apache.servicemix.specs/org.apache.servicemix.specs.scripting-api-1.0/${servicemix.specs.version}/jar
org.apache.servicemix.specs/org.apache.servicemix.specs.stax-api-1.0/${servicemix.specs.version}/jar
org.apache.servicemix.specs/org.apache.servicemix.specs.activation-api-1.1/${servicemix.specs.version}/jar

#Apache Geronimo specs
org.apache.geronimo.specs/geronimo-annotation_1.0_spec/${geronimo.annotation.version}/jar
org.apache.geronimo.specs/geronimo-el_1.0_spec/${geronimo.el.version}/jar
org.apache.geronimo.specs/geronimo-jms_1.1_spec/${geronimo.jms.version}/jar
org.apache.geronimo.specs/geronimo-jpa_3.0_spec/${geronimo.jpa.version}/jar
org.apache.geronimo.specs/geronimo-jta_1.1_spec/${geronimo.jta.version}/jar
org.apache.geronimo.specs/geronimo-servlet_2.5_spec/${geronimo.servlet.version}/jar
org.apache.geronimo.specs/geronimo-ws-metadata_2.0_spec/${geronimo.wsmetadata.version}/jar

#Apache ServiceMix bundles
org.apache.servicemix.bundles/org.apache.servicemix.bundles.abdera/${abdera.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.ant/${ant.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.antlr/${antlr.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.antlr-runtime/${antlr-runtime.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.asm/${asm.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-beanutils/${commons-beanutils.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-csv/${commons-csv.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-dbcp/${commons-dbcp.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-codec/${commons-codec.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-httpclient/${commons.httpclient.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-io/${commons-io.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-jxpath/${commons-jxpath.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-net/${commons.net.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.dom4j/${dom4j.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.flatpack/${flatpack.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.hamcrest/${hamcrest.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.ibatis-sqlmap/${ibatis.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.irclib/${irclib.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.isorelax/${isorelax.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.jcr-api/${jcr-api.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.jdom/${jdom.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.jexcelapi/${jexcelapi.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.jettison/${jettison.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.joda-time/${joda-time.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.josql/${josql.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsch/${jsch.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.juel/${juel.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.junit/${junit.bundle.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.neethi/${neethi.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.ognl/${ognl.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.openjpa/${openjpa.bundle.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.oro/${oro.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.oscache/${oscache.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.httpcore/${httpcore.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.javax.mail/${javax.mail.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.jetty-bundle/${jetty.bundle.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.jing/${jing.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.quartz/${quartz.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.qpid/${qpid.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.saxon/${saxon.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.smack/${smack.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.stringtemplate/${stringtemplate.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.velocity/${velocity.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.werken-xpath/${werken-xpath.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.wsdl4j/${wsdl4j.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.xmlbeans/${xmlbeans.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.xmlresolver/${xmlresolver.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.xpp3/${xpp3.version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.xstream/${xstream.bundle.version}/jar

#Apache CXF bundle
org.apache.cxf/cxf-bundle/${cxf.version}/jar

#Other bundles
org.apache.ws.commons.schema/XmlSchema/${xmlschema.version}/jar
commons-collections/commons-collections/3.2.1/jar
commons-lang/commons-lang/2.4/jar
commons-pool/commons-pool/1.4/jar
org.apache.jackrabbit/jackrabbit-jcr-commons/${jackrabbit.version}/jar
org.codehaus.groovy/groovy-all/1.5.6/jar
org.scala-lang/scala-bundle/2.7.2-RC2/jar
org.springframework/spring-tx/${spring.version}/jar
org.springframework/spring-jms/${spring.version}/jar
org.springframework/spring-jdbc/${spring.version}/jar
org.springframework/spring-orm/${spring.version}/jar
org.springframework/spring-context-support/${spring.version}/jar

