Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven and GWT (and Eclipse) - Does it really work?

Over the past few days I have been trying to create/run a project in Eclipse using the gwt-maven-plugin and keep running into roadblocks (see some of my previous questions). I like to use Maven to do my builds, but I'm at the point where I'm thinking of going the Ant build route because of the complications of using Maven.

Does anyone out there have it configured/working well? Is it just me or is this harder than it should be?

like image 244
sdoca Avatar asked Aug 31 '10 22:08

sdoca


3 Answers

After much frustration trying to get things to play nicely together, this is the setup I have that "works" for me. "Works" meaning that I can create, run and debug a GWT project with tweaks, but it isn't the most elegant solution.

Create Project

Much of the steps are the same as Pascal's answer in this post: Maven GWT 2.0 and Eclipse. I'll list mine out to be clear.

In Eclipse (Helios) with m2eclipse and GWT Eclipse plugins installed:

Create a new Maven project using the gwt-maven-plugin archetype

Modify the pom.xml:

  • set <gwt.version property> to 2.0.4 (needs to be same as GWT Eclipse Plugin version)
  • set <maven.compiler.source> and <maven.compiler.target> properties to 1.6
  • remove <goal>generateAsync</goal> from gwt-maven-plugin <plugin> config
  • add maven-war-plugin to pom.xml

maven-war-plugin example:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
    <warSourceDirectory>war</warSourceDirectory>
        <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
    </configuration>
</plugin>

Update project Properties:

  • Google -> Web Toolkit, check the "Use Google Web Toolkit" box, and ensure "Use default SDK (GWT-2.0.4) is selected.

Run Maven "gwt:eclipse" goal on project (sets up environment and launch config)

Copy *.launch file to workspace.metadata.plugins\org.eclipse.debug.core.launches

Restart Eclipse

Compile/Run Project

I created a Run Configuration that does mvn clean compile gwt:run. The gwt:run is necessary to copy the resources and lib jars into the war directory. However, it does not copy the web.xml from src/main/webapp/WEB-INF into war/WEB-INF/. So, I have to manually copy that file.

If I want to run my application, the above step is sufficient. However, if I want to debug the application, I launch it by choosing the Google "Web Application" configuration from Debug Configurations that was created when the .launch file was copied previously. This configuration allows for debugging (breakpoints etc.) without any other config or need for remote debugging.

like image 190
sdoca Avatar answered Oct 15 '22 06:10

sdoca


It is harder then it should be, however it is possible. All hints posted here can do the trick. However you can still have classloading issues. I decided to switch to GWT 2.1 and use new abilities of JettyLauncher. You can create own jetty launcher like this:

public class MyJettyLauncher extends com.google.gwt.dev.shell.jetty.JettyLauncher {
  @Override
  protected WebAppContext createWebAppContext(TreeLogger logger, File appRootDir) {
    return new WebAppContext(appRootDir.getAbsolutePath(), "/");
  }
}

And then add -server MyJettyLauncher option to your gwt launcher configuration. With such configuration all the libraries are managed by m2eclipse (you can even remove GWT SDK from classpath) and there is no need to copy anything to WEB-INF/lib (you can remove gwt-servlet.jar which could be already there).

Ready launcher is here in tadedon library: http://code.google.com/p/tadedon/source/browse/tadedon-gwt-dev/src/main/java/com/xemantic/tadedon/gwt/dev/JettyLauncher.java

like image 24
morisil Avatar answered Oct 15 '22 06:10

morisil


Yes, in 2016 it does, quite nicely indeed. :)

I launch Tomcat from within Eclipse, I launch GWT codeserver (SuperDev mode) from Eclipse, I launch Chrome from Eclipse.

You will find quite recent and very valuable set-up tutorials on Brandon Donnelson's YouTube channel: https://www.youtube.com/user/branflake2267/videos

What is essential for me is Eclipse debugger for GWT SuperDevMode: https://sdbg.github.io/

I prefer to have my project "mavenized", and there is lot of Maven archetypes also provided by Brandon: https://github.com/branflake2267/Archetypes/tree/master/archetypes

The official starting point (not just) for downloading the GPE plugin (not to confuse with above mentioned debugger plugin) is on GwtProject.com: http://www.gwtproject.org/download.html
For me personally GPE itself has become rather optional "convenience" component. (Yes, refactoring and auto-completion are nice to have, but that's all it is needed for. :)

It is not a one-click solution, and I prefer it like that, as those tend to be black-boxes prone to breaking.

And BTW make sure to take a look at GWT Material: http://gwtmaterialdesign.github.io/gwt-material-demo/

(Currently playing with 2.8-beta1.)

like image 21
Jaroslav Záruba Avatar answered Oct 15 '22 07:10

Jaroslav Záruba