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

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


        <section name="Introduction">
            <p>
                Intellij is very specific because it allows mixed programming out of the box, hence it is the ideal
                partner for mixing it with Ext-Scripting. However while setting everything up you have to be aware
                of several specifics.
            </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.

                To change your source directories open
                <b>File->Project Structure ->Modules->&lt;Your Web Module&gt;</b>
                and mark your script directories as source paths:

                <img src="images/intellij_source.jpg" alt="setting the sourcepath from Intellij"/>
            </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>


        <section name="Navigation Bottom">
            <a href="using_eclipse_.html">&lt;&lt;Back to the Eclipse Users Guide</a>
            or
            <a href="using_netbeans.html">On to the NetBeans Users Guide&gt;&gt;</a>
        </section>

    </body>
</document>