<!--
   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.
  -->
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>bundles</id>
  <formats>
    <format>dir</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <outputDirectory/>
      <outputFileNameMapping>${artifact.artifactId}.jar</outputFileNameMapping>
      <scope>test</scope>
      <includes>
        <include>javax.jcr:jcr</include>
        <include>javax.servlet:javax.servlet-api</include>
        <include>org.slf4j:slf4j-api</include>
        <include>ch.qos.logback:logback-core</include>
        <include>ch.qos.logback:logback-classic</include>
        <include>commons-codec:commons-codec</include>
        <include>commons-io:commons-io</include>
        <include>commons-fileupload:commons-fileupload</include>
        <include>commons-logging:commons-logging</include>
        <include>com.fasterxml.jackson.core:jackson-core</include>
        <include>org.apache.commons:commons-lang3</include>
        <include>org.apache.commons:commons-collections4</include>
        <include>org.apache.jackrabbit:jackrabbit-jcr-commons</include>
        <include>org.apache.jackrabbit:jackrabbit-data</include>
        <include>org.apache.jackrabbit:oak-api</include>
        <include>org.apache.jackrabbit:oak-jackrabbit-api</include>
        <include>org.apache.jackrabbit:oak-shaded-guava</include>
        <include>org.apache.jackrabbit:oak-commons</include>
        <include>org.apache.jackrabbit:oak-core</include>
        <include>org.apache.jackrabbit:oak-store-composite</include>
        <include>org.apache.jackrabbit:oak-store-document</include>
        <include>org.apache.jackrabbit:oak-segment-tar</include>
        <include>org.apache.jackrabbit:oak-segment-remote</include>
        <include>org.apache.jackrabbit:oak-segment-azure</include>
        <include>org.apache.jackrabbit:oak-jcr</include>
        <include>org.apache.jackrabbit:oak-lucene</include>
        <include>org.apache.jackrabbit:oak-search-elastic</include>
        <include>org.apache.tika:tika-core</include>
        <include>org.apache.jackrabbit:oak-blob</include>
        <include>org.apache.jackrabbit:oak-blob-cloud-azure</include>
        <include>org.apache.jackrabbit:oak-core-spi</include>
        <include>org.apache.jackrabbit:oak-store-spi</include>
        <include>org.apache.jackrabbit:oak-query-spi</include>
        <include>org.apache.jackrabbit:oak-security-spi</include>
        <include>org.apache.jackrabbit:oak-blob-plugins</include>
        <include>org.apache.jackrabbit:oak-solr-osgi</include>
        <include>org.apache.jackrabbit:oak-auth-external</include>
        <include>org.apache.jackrabbit:oak-auth-ldap</include>
        <include>io.dropwizard.metrics:metrics-core</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>
