<?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="Why use antrun and not the Ant program itself?">
     <question>Why use antrun and not the Ant program itself?</question>
     <answer>
       <p>Maven has certain benefits over Ant. And for your Ant projects to take
       advantage of these, you can use Maven as your project management tool and
       use its maven-antrun-plugin to build your Ant projects. </p>
       <p>Furthermore, if you wish to migrate from Ant to Maven, you can use
       this plugin first, then gradually convert your Ant expressions into their
       corresponding Maven expressions.</p>
     </answer>
   </faq>
 </part>
</faqs>

