<?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.
  -->
<document xmlns="http://maven.apache.org/XDOC/2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
    <properties>
        <title>Eclipse plugin installation</title>
    </properties>
    <body>
        <h1>Eclipse plugin installation</h1>
        <section name="Introduction">
            <p>
                This document provides instructions for installating of the two Eclipse plugins provided by Axis2
                (<a href="servicearchiver-plugin.html">Service Archive Generator</a> and
                <a href="wsdl2java-plugin.html">Code Generator Wizard</a>).
                The two plugins should work on Eclipse version 3.1 and upwards, and require at least Java 1.5.
                The installation procedure is the same for both plugins, but depends on the Eclipse
                version being used. To determine which procedure to use, check if there is a
                <tt>dropins</tt> folder in the Eclipse installation directory. This folder is used
                by the p2 provisioning system introduced in recent Eclipse version. It should be
                present starting with Eclipse version 3.4.
            </p>
        </section>
        <section name="Installation using the dropins directory">
            <p>
                If your Eclipse version uses p2, use the following procedure to install the
                Axis2 plugins:
            </p>
            <ol>
                <li><a href="../index.html">Download</a> the ZIP file for the plugin you want to install.</li>
                <li>Extract the content of the <tt>plugins</tt> folder in the ZIP archive into the
                <tt>dropins</tt> folder (i.e. do <b>not</b> create a <tt>plugins</tt> folder under <tt>dropins</tt>).</li>
            </ol>
            <p>
                As explained <a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started#Dropins">here</a>,
                it is possible to use other directory layouts in the <tt>dropins</tt> folder.
            </p>
        </section>
        <section name="Installation on older Eclipse versions">
            <p>
                If you have an older Eclipse version that doesn't support p2 yet, use the following
                procedure to install the Axis2 plugins:
            </p>
            <ol>
                <li><a href="../index.html">Download</a> the ZIP file for the plugin you want to install.</li>
                <li>Extract the content of the ZIP archive into the Eclipse installation directory.
                This should add one or more JAR files and/or directories to the existing <tt>plugins</tt>
                folder.</li>
            </ol>
        </section>
    </body>
</document>
