<?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="http://maven.apache.org/FML/1.0.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/FML/1.0.1 http://maven.apache.org/xsd/fml-1.0.1.xsd"
  id="FAQ" title="Frequently Asked Questions">
 <part id="General">
   <faq id="question">
     <question>Is the rar file generated by the maven-rar-plugin is the same with the rar file(compressed file) of WinRar?</question>
     <answer>
       <p>
            No. They are entirely different from each other.
       </p>
       <p>
            A Resource Adapter Archive (RAR) file is a Java archive (JAR) file used to package a resource adapter for the Java 2 Connector (J2C) Architecture
            <br/>
            <br/>
            A RAR file can contain the following:
       </p>
      <ul>
        <li>Enterprise information system (EIS) supplied resource adapter implementation code in the form of JAR files or other runnable components, such as dynamic link lists.</li>
        <li>Utility classes.</li>
        <li>Static documents, such as HTML files, images, and sound files.</li>
      </ul>
       <p>
            While RAR(Roshal ARchive) is the native format of WinRAR archiver. Like other archives, RAR files
            are data containers, they store one or several files in the compressed form.
            After you downloaded RAR file from Internet, you need to unpack its contents in order to use it.
       </p>
     </answer>
   </faq>
 </part>
</faqs>
