## 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.

## line format:
## /directory: groupId[:parent-pom artifactId] [src+bin] [index page url]
##   [*] artifactId [version restriction]
##         * = only check info in index page, but not dist nor site (for plugins provided by components, like archetype, release, ...)
## > artifactId index-path = /path/
## > artifactId site = site url
## > artifactId:version site = site url

> dist-area = http://www.apache.org/dist/maven/

## EOL
## /ant-tasks: org.apache.maven src+bin
##  maven-ant-tasks

/archetype: org.apache.maven.archetype
  maven-archetype

/binaries: content.not.checked

/doxia: org.apache.maven.doxia
  doxia
##  doxia-book-maven-plugin
##  doxia-book-renderer
  doxia-converter
  doxia-linkcheck
  doxia-sitetools

/enforcer: org.apache.maven.enforcer
  enforcer

/indexer: org.apache.maven.indexer
  maven-indexer

## EOL
## /maven-1: content.not.checked

## EOL
## /maven-2: org.apache.maven src+bin
## > apache-maven:2.0.11 site = http://maven.apache.org/ref/2.0.11/
##   apache-maven [2.0,2.1.0-alpha-1)
## > apache-maven:2.2.1 site = http://maven.apache.org/ref/2.2.1/
##   apache-maven [2.2,3.0-alpha-1)

/maven-3: org.apache.maven src+bin
  apache-maven [3.0,3.1.0-alpha-1)
  apache-maven [3.1.0,3.2.0-alpha-1)
  apache-maven [3.2.0,3.3.0-alpha-1)
  apache-maven [3.3.0,3.4.0-alpha-1)
  apache-maven [3.5.0,3.6.0-alpha-1)
  apache-maven

/jxr: org.apache.maven.jxr
  jxr

/plugin-testing: org.apache.maven.plugin-testing
  maven-plugin-testing

/plugin-tools: org.apache.maven.plugin-tools
  maven-plugin-tools

/plugins: org.apache.maven.plugins https://maven.apache.org/plugins/
  maven-acr-plugin
  maven-antrun-plugin
  * maven-archetype-plugin
  maven-assembly-plugin
  maven-changelog-plugin
  maven-changes-plugin
  maven-checkstyle-plugin
  maven-clean-plugin
  maven-compiler-plugin
  maven-dependency-plugin
  maven-deploy-plugin
  maven-doap-plugin
  maven-docck-plugin
  maven-ear-plugin
  maven-ejb-plugin
  * maven-enforcer-plugin 
  * maven-failsafe-plugin
  maven-gpg-plugin
  maven-help-plugin
  maven-install-plugin
  maven-invoker-plugin
  maven-jar-plugin
  maven-jarsigner-plugin
  maven-javadoc-plugin
  maven-jdeps-plugin
  maven-jdeprscan-plugin
  maven-jlink-plugin
  maven-jmod-plugin
  * maven-jxr-plugin 
  maven-linkcheck-plugin
  maven-patch-plugin
  maven-pdf-plugin
  * maven-plugin-plugin
  maven-pmd-plugin
  maven-project-info-reports-plugin
  maven-rar-plugin
  * maven-release-plugin  
  maven-remote-resources-plugin
  maven-resources-plugin
  * maven-scm-plugin
  maven-scm-publish-plugin
  maven-shade-plugin
  maven-site-plugin
  maven-source-plugin
  maven-stage-plugin
  * maven-surefire-plugin
  * maven-surefire-report-plugin
  maven-toolchains-plugin
  maven-verifier-plugin
  maven-war-plugin
## Retired
##  maven-ant-plugin
##  maven-eclipse-plugin
##  maven-idea-plugin
##  maven-one-plugin
##  maven-reactor-plugin
##  maven-repository-plugin

/pom: org.apache https://maven.apache.org/pom/
> apache index-path = /asf/
> apache site = https://maven.apache.org/pom/asf/
  apache

/pom: org.apache.maven https://maven.apache.org/pom/
> maven-parent index-path = /maven/
> maven-parent site = https://maven.apache.org/pom/maven/
  maven-parent

/release: org.apache.maven.release
## release version is restricted because maven-release (=parent pom) versions 3, 4 and 5
## were released in the past separately, with integer value > to actual 2.x version
  maven-release (,3) 

/reporting: org.apache.maven.reporting https://maven.apache.org/shared/
  maven-reporting-api
  maven-reporting-exec
  maven-reporting-impl

/resolver: org.apache.maven.resolver
  maven-resolver
## maven-resolver-ant-tasks
## maven-resolver-demo

/resources: org.apache.apache.resources
## apache-incubator-disclaimer-resource-bundle         
## apache-jar-resource-bundle
## apache-jar-txt-resource-bundle
## apache-license-header-resource-bundle
> apache-source-release-assembly-descriptor site = http://maven.apache.org/apache-resource-bundles/
  apache-source-release-assembly-descriptor

## old artifacts in org.apache groupId waiting for release in org.apache.apache.resources
/resources: org.apache
> apache-incubator-disclaimer-resource-bundle site = http://maven.apache.org/apache-resource-bundles/
  apache-incubator-disclaimer-resource-bundle (,1.1]
> apache-jar-resource-bundle site = http://maven.apache.org/apache-resource-bundles/
  apache-jar-resource-bundle (,1.4]
> apache-license-header-resource-bundle site = http://maven.apache.org/apache-resource-bundles/
  apache-license-header-resource-bundle (,1.1]

/scm: org.apache.maven.scm
  maven-scm 

/shared: org.apache.maven.shared https://maven.apache.org/shared/
  file-management
  maven-artifact-transfer
  maven-common-artifact-filters
  maven-dependency-analyzer
  maven-dependency-tree
  maven-filtering
  maven-invoker
  maven-jarsigner
  maven-mapping
  maven-script-interpreter
  maven-shared-incremental
  maven-shared-jar
  maven-shared-resources
  maven-shared-utils
  maven-shared-io
  maven-verifier
## Retired  
##  maven-artifact-resolver
##  maven-downloader
##  maven-model-converter
##  maven-osgi
##  maven-repository-builder
##  maven-runtime

/shared: org.apache.maven https://maven.apache.org/shared/
  maven-archiver

> maven-skins index-path = /skins/
/skins: org.apache.maven.skins https://maven.apache.org/skins/
  maven-default-skin
  maven-fluido-skin
## Retired  
##  maven-application-skin
##  maven-classic-skin
##  maven-stylus-skin

/surefire: org.apache.maven.surefire
  surefire

/wagon: org.apache.maven.wagon
  wagon
