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

               <a href="./using_intellij.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>