<!--
  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.
-->
<version>
  2.0.0-SNAPSHOT
</version>

<!--
  To update this list, find modules that have public API packages in src/main. e.g.:

  git grep -l -E 'package org.apache.accumulo.(core.(client|data|security)|minicluster)' . \
      | grep src/main | sed 's%src/main/java/.*%%' | sort -u

  Then check the relevant pom files to see what the artifact is named.
-->
<archives>
  /path/to/accumulo-client-mapreduce-2.0.0-SNAPSHOT.jar
  /path/to/accumulo-core-2.0.0-SNAPSHOT.jar
  /path/to/accumulo-minicluster-2.0.0-SNAPSHOT.jar
</archives>

<!--
  To update this list, find packages that are named 'impl', 'thrift', or 'crypto' within our public
  packages. e.g.:

  git grep -l -E 'package org.apache.accumulo.(core.(client|data|security)|minicluster)' . \
      | grep -E '/(impl|crypto|thrift)/' | grep src/main | sed 's%^.*/src/main/java/%%' \
      | sed 's%/[^/]*.java$%%' | sort -u | tr '/' '.'

  This will produce some redundant packages you can trim, e.g.
  org.apache.accumulo.core.client.impl.thrift

-->
<skip_packages>
  org.apache.accumulo.core.client.impl
  org.apache.accumulo.core.client.lexicoders.impl
  org.apache.accumulo.core.client.mapred.impl
  org.apache.accumulo.core.client.mapreduce.impl
  org.apache.accumulo.core.client.mapreduce.lib.impl
  org.apache.accumulo.core.client.mock.impl
  org.apache.accumulo.core.data.impl
  org.apache.accumulo.core.data.thrift
  org.apache.accumulo.core.security.crypto
  org.apache.accumulo.core.security.thrift
  org.apache.accumulo.minicluster.impl
</skip_packages>


<!--
  To update this list, check the README.md file in the apache/accumulo repo under the section title
  'Accumulo API'.
-->
<packages>
  org.apache.accumulo.core.client
  org.apache.accumulo.core.data
  org.apache.accumulo.core.security
  org.apache.accumulo.minicluster
</packages>
