<!--
  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>
  <parent>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-parent</artifactId>
    <version>@version@</version>
    <relativePath>../../pom.xml</relativePath>
  </parent>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-cell</artifactId>
  <packaging>jar</packaging>
  <name>Apache Solr Content Extraction Library</name>
  <description>
    Apache Solr Content Extraction Library integrates Apache Tika 
    content extraction framework into Solr
  </description>
  <properties>
    <module-directory>solr/contrib/extraction</module-directory>
  </properties>
  <scm>
    <connection>scm:git:${vc-anonymous-base-url}</connection>
    <developerConnection>scm:git:${vc-dev-base-url}</developerConnection>
    <url>${vc-browse-base-url};f=${module-directory}</url>
  </scm>
  <dependencies>
@solr-cell.internal.dependencies@
@solr-cell.external.dependencies@
  </dependencies>
</project>
