<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>ranger-solr-plugin</artifactId>
    <name>SOLR Security Plugin</name>
    <description>SOLR Security Plugin</description>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <parent>
        <groupId>org.apache.ranger</groupId>
        <artifactId>ranger</artifactId>
        <version>3.0.0-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.apache.ranger</groupId>
            <artifactId>ranger-plugins-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ranger</groupId>
            <artifactId>ranger-plugins-audit</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ranger</groupId>
            <artifactId>credentialbuilder</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-core</artifactId>
            <version>${solr.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>jdk.tools</groupId>
                    <artifactId>jdk.tools</artifactId>
                </exclusion>
                <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-resolver</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-transport-native-unix-common</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-transport-native-epoll</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-handler</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-buffer</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-codec</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-transport</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>io.netty</groupId>
                   <artifactId>netty-common</artifactId>
               </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>
