<?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="idea-plugin">
     <question>Is this the IDEA Plugin that allows me to run Maven commands from within IntelliJ IDEA?</question>
     <answer>
       <p>No. This is a Maven plugin to generate IntelliJ IDEA files for a Maven project. This is not an IDEA Plugin for Maven.</p>
     </answer>
   </faq>
   <faq id="multi-project-handling">
     <question>How does the IDEA plugin work on multi-projects?</question>
     <answer>
       <p>
         Maven IDEA Plugin, by default, creates the project file (*.ipr) and
         the workspace file (*.iws) from where the root pom is located. Then
         module files (*.iml) are created for each of the projects inside the
         reactor.
       </p>
       <p>
         If some projects depend on another project in the reactor, then the
         reference to the project is given instead of the hard-references to
         the local repository copies of the artifacts.
       </p>
     </answer>
   </faq>
 </part>
</faqs>