  ------
  Introduction
  ------
  Allan Ramirez
  ------
  July 2006
  ------

~~ 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.               

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html

Maven RAR Plugin

  A resource adapter is a system-level software driver that a Java application
  uses to connect to an enterprise information system (EIS). The RAR plugin
  has the capability to store these resource adapters to an archive (Resource
  Adapter Archive or RAR) which can be deployed to a J2EE server.

* Goals Overview

  The RAR plugin has only one goal:

  * {{{rar-mojo.html}rar:rar}} used to package the Resource Adapter Archive
  (RAR) files.

  []

* How to Use

  Instructions on how to use the RAR plugin can be found {{{usage.html}here}}.

* Examples

  To provide you with better understanding on some usages of the Plugin Name,
  you can take a look into the following examples:

  * {{{examples/exclude-project-jar.html}Exclude the project jar from the rar}}

  * {{{examples/ra-custom-location.html}Custom location of Resource Adapter Descriptor}}

  * {{{examples/include-extra-files.html}Include extra files in RAR}}

  * {{{examples/manifest.html}Adding Manifest File}}


* Resources

  Here are some references you can use to know more about Resource Adapter Archive.

  * {{{http://java.sun.com/j2ee/connector/}J2EE Connector API specification}}

  * {{{http://docs.sun.com/source/817-2254-10/Ch_04_sm.html}Resource Adapter Archive Descriptor Sample}}

  []
