<?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 or (scala-lang.jar and scala-compiler.jar) and place it in
                            WEB-INF/lib</li>
                        <li>Prepare your script paths (WEB-INF/java, WEB-INF/groovy, WEB-INF/scala)</li>
                        <li>Add your <a href="./exampleconfig.html">web.xml</a> entries</li>
                        <li>start the web application ...</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 (WEB-INF/java, WEB-INF/groovy, WEB-INF/scala)</li>
                        <li>Add your <a href="./exampleconfig.html">web.xml</a> 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
                        (for the download location check the <a href="./download.html">download page</a>)
                        </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 <a href="./exampleconfig.html">web.xml</a> entries</li>
                        <li>start the web application ...</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>