<?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.
  -->
<document>
  <properties>
    <title>Apache Resource Bundles</title>
    <author>Olivier Lamy</author>
  </properties>

  <body>
    <section name="Apache Resource Bundles">
      <p>Maven project provides a set of resources to help you build Java resources compliant with Apache rules.</p>

      <p>
        If you find bugs in the resource bundles please report them in
        <a href="https://issues.apache.org/jira/browse/MASFRES/">JIRA</a>.
      </p>

      <section name="JAR Resource Bundle and Incubator Disclaimer Resource Bundle">
        <p>
          To generate following content in your jar:
          <ul>
            <li><code>META-INF/DEPENDENCIES</code></li>
            <li><code>META-INF/LICENSE</code></li>
            <li><code>META-INF/NOTICE</code></li>
            <li><code>META-INF/DISCLAIMER</code></li>
          </ul>
          <source><![CDATA[      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <goals>
              <goal>process</goal>
            </goals>
            <configuration>
              <resourceBundles>
                <!-- Will generate META-INF/DEPENDENCIES META-INF/LICENSE META-INF/NOTICE -->
                <resourceBundle>org.apache.apache.resources:apache-jar-resource-bundle:1.5-SNAPSHOT</resourceBundle>
                <!-- Will generate META-INF/DEPENDENCIES.txt META-INF/LICENSE.txt META-INF/NOTICE.txt -->
                <resourceBundle>org.apache.apache.resources:apache-jar-txt-resource-bundle:1.5-SNAPSHOT</resourceBundle>
                <!-- Will generate META-INF/DISCLAIMER  -->
                <resourceBundle>org.apache.apache.resources:apache-incubator-disclaimer-resource-bundle:1.2-SNAPSHOT</resourceBundle>
              </resourceBundles>
            </configuration>
          </execution>
        </executions>
      </plugin>]]></source>
        </p>
      </section>

      <section name="Source Release Assembly Descriptor">
        <p>Create a source-release artifact that contains the fully buildable project directory source structure.
          This is the artifact which is the official subject of any release vote.
          <source><![CDATA[      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>org.apache.apache.resources</groupId>
            <artifactId>apache-source-release-assembly-descriptor</artifactId>
            <version>1.0.6</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>source-release-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <!--
              use this flag to generate source release assembly from the top of a multi modules
              maven project.

              <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
              -->
              <descriptorRefs>
                <!--
                  There are 3 descriptors available, choose one of them:
                  * source-release (zip only, this one is used in the ASF parent POM) 
                  * source-release-zip-tar (both zip and tar) 
                  * source-release-tar (tar only) 
                -->
                <descriptorRef>source-release</descriptorRef>
              </descriptorRefs>
              <tarLongFileMode>gnu</tarLongFileMode>
            </configuration>
          </execution>
        </executions>
      </plugin>]]></source>
        </p>
      </section>
    </section>
  </body>
</document>