<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
    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>
    <properties>
        <title>Using Ext-Scripting in Eclipse</title>
    </properties>

    <body>

        <section name="Navigation Top">
            <a href="using_netbeans.html">&lt;&lt;Back to the Netbeans Users Guide</a>
            or
            <a href="configentries.html">On to the configuration entries overview&gt;&gt;</a>
        </section>

        <section name="Appendix: Setup Steps">


            <subsection name="Short setup overview">
                <p>This section is only a checklist of things to do at the setup for details follow the explanations
                    in the <a href="installation.html">page</a>
                </p>

                <p>
                    Manual setup
                    <ul>
                        <li>Check if your installation environment is setup</li>
                        <li>Download the appropriate meta bundle and place it in WEB-INF/lib</li>
                        <li>Download groovy-all.jar and place it in WEB-INF/lib</li>
                        <li>Prepare your script paths</li>
                        <li>Add your web.xml entries</li>
                        <li>mvn clean install ...</li>
                    </ul>
                </p>
                <p>
                    Build via maven
                    <ul>
                        <li>Check if your installation environment is setup</li>
                        <li>Add your pom xml dependencies and the repository entry</li>
                        <li>Prepare your script paths</li>
                        <li>Add your web.xml entries</li>
                        <li>mvn clean install ...</li>
                    </ul>
                </p>

                <p>
                    Build via ide
                    <ul>
                        <li>Check if your installation environment is setup</li>
                        <li>Download the appropriate meta bundle and add it to your dependency and deployment settings
                        </li>
                        <li>Download groovy-all.jar and add it to your dependency and deployment settings</li>
                        <li>Prepare your script paths</li>
                        <li>Add your web.xml entries</li>
                        <li>mvn clean install ...</li>
                    </ul>
                </p>
            </subsection>
        </section>

        <section name="Navigation Bottom">
                   <a href="using_netbeans.html">&lt;&lt;Back to the Netbeans Users Guide</a>
                   or
                   <a href="configentries.html">On to the configuration entries overview&gt;&gt;</a>
        </section>

    </body>
</document>