<!--
  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.lucene</groupId>
    <artifactId>lucene-parent</artifactId>
    <version>@version@</version>
    <relativePath>../../pom.xml</relativePath>
  </parent>
  <groupId>org.apache.lucene</groupId>
  <artifactId>lucene-analyzers-icu</artifactId>
  <packaging>jar</packaging>
  <name>Lucene ICU Analysis Components</name>
  <description>    
    Provides integration with ICU (International Components for Unicode) for
    stronger Unicode and internationalization support.
  </description>
  <properties>
    <module-directory>lucene/analysis/icu</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>
@lucene-analyzers-icu.internal.dependencies@
@lucene-analyzers-icu.external.dependencies@
  </dependencies>
</project>
