<?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="./usingAdvanced.html">&lt;&lt;Back to the Advanced Users Guide</a>
               or

               <a href="./usingIntellij.html">On to the Intellij Users Guide&gt;&gt;</a>
           </section>


        <section name="Introduction">
            <p>
                Eclipse is somewhat different to the rest of the IDEs because it allows to compile classes on the fly.
                But yet still Ext-Scripting and Eclipse are a good combination, but several things have to be taken into
                consideration.
            </p>
            <ul>
                <li>Ext-Scripting does its own incremental compile cycle depending on the sources changed</li>
                <li>Deployment and Redeployment is not needed as long as Ext-Scripting itself can pick up the changes
                </li>
            </ul>
        </section>
        <section name="Setting up Eclipse">
            <subsection name="Prerequirements">

                <p>Secondly make sure that your project compiles properly
                    and can be properly deployed from eclipse. Turn off any auto deployment mechanisms
                    which might trigger unnecessary restarts.
                </p>

                <p>If you use scripting languages make sure to have the proper
                    plugin installed for the scripting language of your choice
                </p>
            </subsection>
        </section>
        <section name="Setting up Ext-Scripting specifics">
            <p>
                If you only have one sourcepath you might have a look at the package whitelisting
                to mark only the packages you actively want to edit for this deployment cycle.
                This speeds up startup time and helps generally to avoid restarts.
            </p>
            <p>
                If you use different paths then you can work by including the added source paths as sources
                like WEB-INF/java or WEB-INF/groovy (not classes compiled via Ext-Scripting always have higher loading
                priority than what can be found in WEB-INF/classes), so there is no need to change any target directories
                source directories always are enough.
            </p>
            <p>
                You can leave your compile target directory unchanged
            </p>
            <p>
                If you prefer your own source paths to be the sources of everything set the
                <b>org.apache.myfaces.extensions.scripting.java.LOADER_PATHS</b>
                or
                <b>org.apache.myfaces.extensions.scripting.groovy.LOADER_PATHS</b>
                accordingly in your web.xml the same goes for the resource roots.
            </p>

        </section>

        TODO add images here

    </body>
</document>