--- Generated by GWT WebAppCreator ---

Congratulations, you've successfully generated a starter project!  What next?

-- Option A: Import your project into Eclipse (recommended) --

If you use Eclipse, you can simply import the generated project into Eclipse.
We've tested against Eclipse 3.4 and 3.5.  Later versions will likely also
work, earlier versions may not.

If the directory containing this file does not have a .classpath or .project
file, generate them by running 'ant eclipse.generate'

Eclipse users will need to have the m2eclipse, or equivalent, pluigin installed.
Instructions for how to install the m2eclipse plugin can be found here:
http://m2eclipse.sonatype.org/installing-m2eclipse.html

Eclipse users will also want to run "mvn package" before importing into Eclipse.
This will unpack the App Engine SDK to the local repository.

In Eclipse, go to the File menu and choose:

  File -> Import... -> Existing Maven Projects into Workspace

  Browse to the directory containing this file,
  select "Expenses".
  
  Click Finish.
  
You can now browse the project in Eclipse.

To launch your web app in GWT development mode, go to the Project -> Properties
and expand the Google menu item. From there:

  Navigate to App Engine item, select  "Use App Engine", and specify which App Engine
  SDK to use.
 
  Navigate to the Web Appliation item, select "This project has a WAR directory",
  speicigy src/main/webapp, and uncheck "Launch and deploy...".

  Navigate to Web Toolkit, select "use Google Web Toolkit", and specify which
  GWT SDK you want to use.

  Go to the Run menu item and select Run -> Debug as -> Web Application.
  
  When prompted for which directory to run from, simply select the directory
  that Eclipse defaults to.

  You can now use the built-in debugger to debug your web app in development mode.

If you supplied the junit path when invoking webAppCreator, you should see
launch configurations for running your tests in development and production
mode.

-- Option B: Build from the command line with Maven --

If you prefer to work from the command line, you can use Maven to build your
project. (http://maven.apache.org/)  Maven uses the supplied 'pom.xml' file
which describes exactly how to build your project.  This file has been tested
to work against Maven 2.2.1  The following assumes 'mvn' is on your command
line path.

To run development mode, just type 'mvn gae:run'.

To compile your project for deployment, just type 'mvn package'.

For a full listing of other goals, visit:
http://mojo.codehaus.org/gwt-maven-plugin/plugin-info.html

