<?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 https://maven.apache.org/xsd/fml-1.0.xsd"
  title="Frequently Asked Technical Questions">
  <part id="faq">
    <faq id="encoding-warning">
      <question>How do I prevent "[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!"</question>
      <answer>
        <p>
          This or a similar warning is emitted by a plugin that processes plain text files but has not been configured to
          use a specific file encoding. So eliminating the warning is simply a matter of finding out which plugin emits it
          and how to configure the file encoding for it. This is as easy as adding the following property to 
          your POM (or one of its parent POMs):
        </p>
        <source><![CDATA[<project>
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  ...
</project>]]></source>
      </answer>
    </faq>

    <faq id="scope-provided">
      <question>How do I prevent including JARs in WEB-INF/lib? I need a "compile only" scope!</question>
      <answer>
        <p>
          The scope you should use for this is
          <code>provided</code>. This indicates to Maven that the dependency will be
          provided at run time by its container or the JDK, for example.
        </p>
        <p>
          Dependencies with this scope will not be passed on transitively, nor will they be bundled in a package such
          as a WAR, or included in the runtime classpath.
        </p>
      </answer>
    </faq>

    <faq id="available-plugins">
      <question>How do I list available plugins?</question>
      <answer>
        <p>
          The "Available Plugins" page lists them and provides additional information.
          See <a href="/plugins/">https://maven.apache.org/plugins</a>
        </p>
      </answer>
    </faq>

    <faq id="plugin-version">
      <question>How do I determine what version of a plugin I am using?</question>
      <answer>
        <p>
          You can use the <a href="/plugins/maven-help-plugin/">Maven Help Plugin</a>'s
          <a href="/plugins/maven-help-plugin/describe-mojo.html"><code>describe</code></a> goal.
          For example, to find out the version of the install plugin:
        </p>
        <source>mvn -Dplugin=install help:describe</source>
        <p>
          Note that you must give the plugin prefix as the argument to plugin, not it's artifact ID.
        </p>
      </answer>
    </faq>

    <faq id="using-ant-tasks">
      <question>How can I use Ant tasks in a Maven build?</question>
      <answer>
        <p>
          There are currently 2 alternatives:
        </p>
        <ul>
          <li>
            For use in a plugin written in Java, Beanshell or other Java-like scripting language, you can construct
            the Ant tasks using the
            <a href="https://ant.apache.org/manual/antexternal.html">instructions given in the Ant
              documentation</a>
          </li>
          <li>
            If you have very small amounts of Ant script specific to your project, you can use the
            <a href="/plugins/maven-antrun-plugin/index.html">AntRun plugin</a>.
          </li>
        </ul>
      </answer>
    </faq>

    <faq id="maven-ant-tasks">
      <question>How can I use Maven features in an Ant build?</question>
      <answer>
        <p>
          The <a href="/ant-tasks/index.html">Maven Ant Tasks</a> allow many of the features of 
          Maven, such as dependency management and repository deployment, to be used in an Ant build. 
        </p>
      </answer>
    </faq>

    <faq id="Compiling-Java-7">
      <question>How do I set up Maven so it will compile with a target and source JVM of my choice?</question>
      <answer>
        <p>
          You must configure the source and target parameters in your pom. For example, to set the source and
          target JVM to 7, you should have in your pom:
        </p>
        <source><![CDATA[<project>
  ...
  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
  ...
</project>]]></source>
        <p>
          Or if a parent pom overrides for compiler plugin default values and you can't fix it,
          you'll have to explicitely force the values in the compiler plugin configuration:
        </p>
        <source><![CDATA[<project>
  ...
  <build>
  ...
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  ...
  </build>
  ...
</project>]]></source>
      </answer>
    </faq>

    <faq id="dir-struct">
      <question>Is it possible to create my own directory structure?</question>
      <answer>
        <p>
          Absolutely yes!
        </p>
        <p>
          By configuring <code>&lt;sourceDirectory&gt;</code>, <code>&lt;resources&gt;</code> and other elements of
          the <code>&lt;build&gt;</code> section.
        </p>
        <p>
          In addition, you may need to change the plugin configuration if you are
          not using plugin defaults for their files/directories.
        </p>
      </answer>
    </faq>

    <faq id="m2-source-code">
      <question>Where is the source code? I couldn't seem to find a link anywhere on the Maven site.</question>
      <answer>
        <p>
          The source code can be found in <a href="scm.html">our Subversion and Git repositories</a>.
        </p>
        <p>
          For more information, see <a href="/guides/development/guide-building-maven.html">Building Maven</a>.
        </p>
      </answer>
    </faq>

    <faq id="proxy-needed">
      <question>Maven can't seem to download the dependencies. Is my installation correct?</question>
      <answer>
        <p>
          You most probably need to configure Maven to use a proxy. Please see the information on
          <a href="/guides/mini/guide-proxies.html">Configuring a proxy</a> for information on how to configure your proxy
          for Maven.
        </p>
      </answer>
    </faq>

    <faq id="importing-jars">
      <question>I have a jar that I want to put into my local repository. How can I copy it in?</question>
      <answer>
        <p>
          If you understand the layout of the Maven repository, you can copy the jar directly into where it
          is meant to go. Maven will find this file next time it is run.
        </p>

        <p>
          If you are not confident about the layout of the Maven repository, then you can
          adapt the following command to load in your jar file, all on one line.
        </p>

        <source><![CDATA[
mvn install:install-file
  -Dfile=<path-to-file>
  -DgroupId=<group-id>
  -DartifactId=<artifact-id>
  -Dversion=<version>
  -Dpackaging=<packaging>
  -DgeneratePom=true

Where: <path-to-file>  the path to the file to load
       <group-id>      the group that the file should be registered under
       <artifact-id>   the artifact name for the file
       <version>       the version of the file
       <packaging>     the packaging of the file e.g. jar
     ]]></source>
        <p>
          This should load in the file into the Maven repository, renaming it as needed.
        </p>
      </answer>
    </faq>

    <faq id="unsubscribing-from-mailing-lists">
      <question>How do I unsubscribe from Maven mailing lists?</question>
      <answer>
        <p>
        To unsubscribe from a Maven mailing list you simply send a message to
        <source>[mailing-list]-unsubscribe@maven.apache.org</source>
        </p>
        <p>
        So, if you have subscribed to <code>users@maven.apache.org</code> then you would
        send a message to <code>users-unsubscribe@maven.apache.org</code> in order to
        get off the list.
        People tend to have problems when they subscribe with one address and
        attempt to unsubscribe with another. So make sure that you are using the
        same address when unsubscribing that you used to subscribe before
        asking for help.
        </p>
        <p>
        If you find you still cannot get off a list then
        send a message to <code>[mailing-list]-help@maven.apache.org</code>. These
        instructions are also appended to every message sent out on a maven mailing
        list ...
        </p>
      </answer>
    </faq>

    <faq id="skip-test">
      <question>How do I skip the tests?</question>
      <answer>
        Add the parameter <code>-Dmaven.test.skip=true</code> or <code>-DskipTests=true</code> in the command line,
        depending on whether you want to skip test compilation and execution or only execution. See the example
        <a href="/plugins/maven-surefire-plugin/examples/skipping-tests.html">Skipping Tests</a>
        in <a href="/plugins/maven-surefire-plugin/">the Surefire Plugin's documentation</a> for more details.
      </answer>
    </faq>

    <faq id="run-one-test">
      <question>How can I run a single unit test?</question>
      <answer>
        Use the parameter <code>-Dtest=MyTest</code> at the command line.
        NB: do not specify the entire package (org.apache.x.y.MyTest)
      </answer>
    </faq>

    <faq id="special-characters-site">
      <question>Handle special characters in site</question>
      <answer>
        <p>Configure your ide to use the correct encoding. With Eclipse, add
        <code>-Dfile.encoding=ISO-8859-1</code> in eclipse.ini file</p>
        <p>Configure the reporting output encoding in your pom
      <source><![CDATA[<project>
  ...
  <properties>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>
  ...
</project>]]></source>
        or if default encoding is overridden in a parent pom that you can't change, configure the site plugin explicitely:
      <source><![CDATA[<project>
  ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-site-plugin</artifactId>
    <version>3.6</version>
    <configuration>
      <outputEncoding>UTF-8</outputEncoding>
    </configuration>
  </plugin>
  ...
<project>]]></source>
        </p>
        <p>
          Configure the file encoding use by mvn.
          add to MAVEN_OPTS the encoding (same as the ide).
          This can be made with adding <code>MAVEN_OPTS="-Dfile.encoding=ISO-8859-1"</code> in <code>$HOME/.profile</code>
        </p>
      </answer>
    </faq>

    <faq id="test-property-name">
      <question>Maven compiles my test classes but doesn't run them?</question>
      <answer>
        <p>
          Tests are run by <a href="/surefire/maven-surefire-plugin/">the surefire plugin</a>.
          The surefire plugin can be configured to run certain test classes and
          you may have unintentionally done so by specifying a value to ${test}.

          Check your settings.xml and pom.xml for a property named "test" which would like this:
        </p>
        <source><![CDATA[<project>
  ...
  <properties>
    <property>
      <name>test</name>
      <value>some-value</value>
     </property>
  </properties>
  ...
</project>]]></source>
        <p>
          or
        </p>
        <source><![CDATA[<project>
  ...
  <properties>
    <test>some-value</test>
  </properties>
  ...
</project>]]></source>
      </answer>
    </faq>

    <faq id="snapshot-artifacts">
      <question>Where are Maven SNAPSHOT artifacts?</question>
      <answer>
        <p>
          If you are trying to build a development version of Maven or plugins,
          you may need to access the Maven snapshot repositories.
        </p>

        <p>
          You need to update your settings.xml file using the
          <a href="/guides/development/guide-testing-development-plugins.html">
          Guide to Plugin Snapshot Repositories</a>
        </p>
      </answer>
    </faq>

    <faq id="maven-xsd">
      <question>Where are the Maven XSD schemas?</question>
      <answer>
        <p>
          The Maven XSD is located <a href="/xsd/maven-4.0.0.xsd">here</a> and the Maven
          Settings XSD is located <a href="/xsd/settings-1.0.0.xsd">here</a>.
        </p>
        <p>
          Your favorite IDE probably supports XSD schema's for pom.xml and settings.xml editing. You need to
          specify the following:
        <source>
&lt;project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      https://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;

  ...
&lt;/project&gt;</source>
        <source>
&lt;settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd"&gt;
  ...
&lt;/settings&gt;</source>
        </p>
      </answer>
    </faq>

    <faq id="getting-help">
      <question>Maven doesn't work, how do I get help?</question>
      <answer>
        <p>
          We have compiled a list of available resources on the
          <a href="/users/getting-help.html">getting help page</a>
        </p>
      </answer>
    </faq>

    <faq id="How_to_produce_execution_debug_output_or_error_messages">
      <question>How to produce execution debug output or error messages?</question>
      <answer>
        <p>
          You could call Maven with <i>-X</i> parameter or <i>-e</i> parameter. For more information,
          run:
          <source>mvn --help</source>
        </p>
      </answer>
    </faq>

    <faq id="What_is_a_Mojo">
      <question>What is a Mojo?</question>
      <answer>
        <p>
          A mojo is a <b>M</b>aven plain <b>O</b>ld <b>J</b>ava <b>O</b>bject. Each mojo is an executable
          <i>goal</i> in Maven, and a Maven plugin is a distribution of one or more related mojos.
        </p>
      </answer>
    </faq>

    <faq id="How_to_find_dependencies">
      <question>How to find dependencies on public Maven repositories?</question>
      <answer>
        <p>
          You could use the following search engines:
        </p>
        <ul>
          <li><a href="https://search.maven.org/">https://search.maven.org</a></li>
          <li><a href="https://repository.apache.org">https://repository.apache.org</a></li>
          <li><a href="https://mvnrepository.com">https://mvnrepository.com</a></li>
        </ul>
      </answer>
    </faq>
    <faq id="javadoc_jar_built_twice">
      <question>Why is my Javadoc JAR built twice during release?</question>
      <answer>
        With MNG-5940 the release profile goal of the Maven Javadoc Plugin has been changed to <code>
        jar-no-fork</code>. Revise your configuration to avoid duplicate JAR upload.
      </answer>
    </faq>
  </part>
</faqs>
