<?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.
-->
<faqs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://maven.apache.org/FML/1.0"
  xsi:schemaLocation="http://maven.apache.org/FML/1.0 http://maven.apache.org/xsd/fml-1.0.xsd"
  title="Frequently Asked Questions About Project Metadata">
  <part id="faq">
    <faq id="why-care">
      <question>Why do I care?</question>
      <answer>
        <p>
          If you're a user of Maven then you are familiar with the Project Object Model (POM) which is the basic unit of
          work in Maven. Maven is a project-centric tool and so we attempt to capture the essence of a project in the
          POM. This includes things like what your project is, where the project lives, where you can find the sources
          for project, who the developers are on the project and how you can get hold of them, what you need to build
          the project, the way your project will be built, what form your project will be distributed in, and where it
          will be distributed from.
        </p>
        <p>
          But why would a project not using Maven care?
        </p>
        <p>
          Whether you want to use Maven or not, users of your project - especially if you provide a framework or
          reusable library - may choose to use <a href="/repository/">Central Maven repository</a>.
          The quality of the metadata in the Central Maven repository is important
          to your users, as they list dependencies on your metadata and link in the information into their own
          projects.
        </p>
        <p>
          Maintaining the metadata for your project is not hard - you can submit it to Central Maven repository at release time (and
          for large projects it can be setup automatically), and just need to describe your project, its location,
          version and most importantly its dependencies. Not doing so, or providing incomplete or invalid information
          leaves this responsibility to the users of your project.
        </p>
        <p>
          The Maven team does <a href="/guides/mini/guide-maven-evangelism.html">work on this metadata actively to improve its quality</a>, but with thousands of artifacts in
          the repository and only a certain level of knowledge of other projects this is not ideal. Nobody knows your
          project better than you.
        </p>
      </answer>
    </faq>
    <faq id="how-to-improve-metadata">
      <question>How do I make sure my project's dependency metadata is correct?</question>
      <answer>
        <p>
          It is best to get it right at the time of a release to avoid having to make difficult updates later on.
          Your information can be submitted to Central Maven repository using the regular
          <a href="/guides/mini/guide-central-repository-upload.html">Central repository upload procedure</a>.
        </p>
        <p>
          The following information is what is best to provide:
        </p>
        <ul>
          <li>Project name</li>
          <li>Project URL</li>
          <li>License</li>
          <li>Description of the project</li>
          <li>Group and Artifact ID</li>
          <li>Packaging</li>
          <li>Version</li>
          <li>Dependencies</li>
        </ul>
        <p>
          The group ID should resemble the package name, or reverse DNS of your web site, and can contain subgroups as
          you see fit: for example, org.apache.maven and org.apache.maven.plugins.
        </p>
        <p>
          The artifact ID is specific to each artifact and by convention should be the filename, excluding
          extension.
        </p>
        <p>
          The packaging is the type of your artifact, such as jar, war, ear, ejb, dll, etc.
        </p>
        <p>
          Each dependency also contains their group ID and artifact ID, as well as version specification.
          In particular, you should ensure that optional dependencies are marked as such, and that runtime and testing
          only dependencies are marked with the given scope. Ranges can be used for version if that is appropriate,
          such as commons-collections [2.0,3.0). Ensure that the dependency exists in the Maven system and matches
          first.
        </p>
        <p>
          See the format of the
          <a href="/maven-model/maven.html">project descriptor</a>
          for more information.
        </p>
      </answer>
    </faq>
    <faq id="how-to-automatically-sync">
      <question>How do I ensure my latest releases automatically appear in the Central Maven repository?</question>
      <answer>
        <p>
          If you are able to publish your releases to a Maven2 style repository and make it available over rsync,
          we can automatically publish them to ibiblio when released. This procedure requires that you take full
          responsibility for your metadata, but also ensures the best service for your users. If this is interesting
          to your project, contact dev@maven.apache.org.
        </p>
      </answer>
    </faq>
  </part>
</faqs>
