<?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 id="FAQ" title="Frequently Asked Questions">
  <part id="General">
    <faq id="What are resources?">
      <question>
        What are resources?
      </question>
      <answer>
        <p>Resources are non-source code files used by your project. Examples of
        these are properties files, images and XML files.</p>
      </answer>
    </faq>
    <faq id="When should I use the resouces plugin's goal outside a lifecycle?">
      <question>
        When should I use the Resources Plugin's goal outside a lifecycle?
      </question>
      <answer>
        <p>The Maven Resource Plugin simply copies resources from your source to
        your build output (with optional filtering). So if that's the only
        operation you are interested in, you can skip the other phases such as
        compilation and testing and simply do</p>

        <source>mvn resources:resources</source>

        <p>For example, if you just debugged your configuration file and you
        want to manually test it in your container if it works, you can simply
        do</p>

        <source>mvn resources:resources</source>

        <p>This will produce those configuration files on your
        output thus skipping the other phases which may eat up a huge amount of
        your time.</p>
      </answer>
    </faq>
    <faq id="Do my main resources go to my test resources as well?">
      <question>
        Do my main resources go to my test resources as well?
      </question>
      <answer>
        <p>No. Your main resources and your test resources are separated from
        each other.</p>

        <p>Your test resources should only be used by your tests. Thus, they are
        separated from the main to avoid any side effects that may occur.</p>
      </answer>
    </faq>
    <faq id="What encoding values are allowed?">
      <question>
        What encoding values are allowed?
      </question>
      <answer>
        <p>The Maven Resource Plugin only allows encoding values representing
        the charsets supported by the Java platform, namely <code>US-ASCII</code>,
        <code>ISO-8859-1</code>, <code>UTF-8</code>, <code>UTF-16BE</code>, <code>UTF-16LE</code> and <code>UTF-16</code>.</p>
      </answer>
    </faq>
  </part>
</faqs>
