Wednesday, March 23, 2011

Inheriting GWT modules from other Eclipse projects

What if you already have some Eclipse GWT project in the workspace and you want to use it in your current GWT project? Here are the steps (assuming obt2j is the name of the project you want to use and obt is the name of the package where the module you want to inherit from (Obt2) resides).

1. Select your current GWT project in Package Explorer. Go to Properties -> Java Build Path -> Projects, Add..., select obt2j, OK. Select Libraries, Add Class Folder..., select obt2j/src/obt. OK.

2. In a source file from your current project, make a reference to the code owned by module obt. You will see errors, and 1 quick fix will be available:

    Import GWT module obt.Obt2

Apply the fix ONLY ONCE. The following line,

<inherits name="obt.Obt2"/>

, is being added to the corresponding module definition in your current project. Now your current project is hooked to project obt2j.

Starting a new GWT project from scratch (Eclipse)

The GWT Starter Project gets generated for you by default. When you get tired removing the generated code each time you create a new GWT project, and if you use Eclipse IDE, you can use the following nice menu items:

  • File -> New -> Module,
  • File -> New -> HTML Page, and
  • File -> New -> Entry Point Class
in this exact order. (The shortcut for File -> New on a Mac is option-command-N.) Some details are due, though.

1. Select the New Web Application Project menu item. Project name: site1, Package: s1, unselect Use Google App Engine, unselect Generate GWT sample code. Finish.

2. In the Package Explorer view, select your site1 project. Select the New GWT Module menu item. Module name: m1, Package: s1, Finish. In the generated m1.gwt.xml, add an attribute to the root element; the result should look like this:

    <module rename-to="m1">

If you do not do this, the next step will produce incorrect results.

3. Select the New HTML Page menu item. File name: welcome.html, Finish.

4. Select the New Entry Point Class menu item, Name: EntryPoint, Finish. Make a note - the m1.gwt.xml file has been updated accordingly in the editor, and you now MUST save this file. 


If you now debug your site1, you will see EntryPoint.onModuleLoad() started.

Summing up, the trick is to rename the generated module.