GWT tutorial does not compile

1,226 views
Skip to first unread message

likejudo

unread,
Apr 29, 2021, 1:57:18 PM4/29/21
to GWT Users
I am learning GWT and was trying to run this tutorial http://www.gwtproject.org/doc/latest/tutorial/index.html

Using the Eclipse GWT plugin 3.0 on Windows 10 and JDK 11

I get this error on the first line Error: There is '1' error in 'gwt-module.dtd'.

I installed the plugin from the marketplace.
I see this error in other tutorials too.

Any suggestions appreciated.

lofid...@gmail.com

unread,
Apr 29, 2021, 4:36:02 PM4/29/21
to GWT Users
Hi,

today I won't use the GWT plugin for Eclipse anymore... 

I would just use Eclipse / IntelliJ / Visual Studio Code and Maven.

Some introductions:
Hope this helps.

Vegegoku

unread,
Apr 29, 2021, 4:39:14 PM4/29/21
to GWT Users
Try following this tutorial https://dev.to/ibaca/modern-gwt-first-steps-509k

likejudo

unread,
Apr 29, 2021, 4:48:51 PM4/29/21
to GWT Users
Thanks for the links.
I found from other posts that DOCTYPE was incorrectly set. 'www' is required and that fixed it. 
However, I am stuck here now:
   [ERROR] Hint: Check that your module inherits 'com.google.gwt.core.Core' either directly or indirectly (most often by inheriting module 'com.google.gwt.user.User')

Have you seen this before?

lofid...@gmail.com

unread,
Apr 29, 2021, 5:14:19 PM4/29/21
to GWT Users
You need to take a look at the Module file in the project: Xxx.gwt.xml. Example for StockWatcher demo app: https://github.com/manolo/gwt-stockwatcher/blob/master/src/com/google/gwt/sample/stockwatcher/StockWatcher.gwt.xml


Hope this helps

likejudo

unread,
Apr 29, 2021, 8:24:09 PM4/29/21
to GWT Users
but I have not modified the tutorial file at all so it should have worked.

Thanks for the file. I took the gwt.xml from your link

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.2//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.6.2/distro-source/core/src/gwt-module.dtd">
<module rename-to='stockwatcher'>
  <!-- Inherit the core Web Toolkit stuff.                        -->
  <inherits name='com.google.gwt.user.User'/>

  <!-- Inherit the default GWT style sheet.  You can change       -->
  <!-- the theme of your GWT application by uncommenting          -->
  <!-- any one of the following lines.                            -->
  <inherits name='com.google.gwt.user.theme.standard.Standard'/>
  <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
  <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->
  <!-- Specify the app entry point class.                         -->
  <entry-point class='com.google.gwt.sample.stockwatcher.client.StockWatcher'/>
</module>

I did Run As and picked Dev Mode:

Turning off precompile in incremental mode.
Super Dev Mode starting up
   workDir: C:\Users\Anil\AppData\Local\Temp\gwt-codeserver-9512230354285428339.tmp
2021-04-29 19:15:08.287:INFO::main: Logging initialized @691ms
   Loading Java files in com.google.gwt.sample.stockwatcher.StockWatcher.
   [ERROR] Hint: Check that your module inherits 'com.google.gwt.core.Core' either directly or indirectly (most often by inheriting module 'com.google.gwt.user.User')


What am I missing?

lofid...@gmail.com

unread,
Apr 30, 2021, 2:48:30 AM4/30/21
to GWT Users
Hmmm that looks fine from here... because the module com.google.gwt.user.User (User.gwt.xml) inherits com.google.gwt.core.Core (Core.gwt.xml) so you don't need to directly inherits the Core module.

Here you can see that User module already inherits everything:

Maybe your project cannot find the the Core module file: Core.gwt.xml.

The problem is I don't know what the Eclipse GWT Plugin is doing today... how the dependencies are defined...

I your case I would just download this zip file from above: https://github.com/lofidewanto/gwt-boot-sample-basic/archive/refs/heads/main.zip (simple "Hello World" example: https://github.com/lofidewanto/gwt-boot-sample-basic) and then copy & paste
  • all the Java classes
  • the HTML host file: index.html
  • the GWT Module file: Xxxx.gwt.xml
into the project...

I think we need to rework all the examples from GWT project site not to use the GWT plugin for Eclipse anymore... instead just using Maven.

Craig Mitchell

unread,
Apr 30, 2021, 3:37:27 AM4/30/21
to GWT Users
Don't you have to define the source path in the gwt.xml?

Ie: If your gwt.xml file is in com.google.gwt.sample.stockwatcher

Then because your entry point is com.google.gwt.sample.stockwatcher.client.StockWatcher, you'd add:
<source path='client' />

To tell GWT it needs to look in  com.google.gwt.sample.stockwatcher.client and below.

Thomas Broyer

unread,
Apr 30, 2021, 4:32:46 AM4/30/21
to GWT Users
On Thursday, April 29, 2021 at 10:48:51 PM UTC+2 likejudo wrote:
Thanks for the links.
I found from other posts that DOCTYPE was incorrectly set. 'www' is required and that fixed it. 

That DOCTYPE is mostly useless (it can help in IDEs to provide autocompletion and validation, but that's it), so you can just delete it.
 
However, I am stuck here now:
   [ERROR] Hint: Check that your module inherits 'com.google.gwt.core.Core' either directly or indirectly (most often by inheriting module 'com.google.gwt.user.User')

Have you seen this before?

It generally means there's another issue. Can you share the whole log?
Also, which GWT version are you using? (surely not 1.6.2, that's way too old)
and which JDK version?

likejudo

unread,
Apr 30, 2021, 11:52:15 AM4/30/21
to GWT Users

likejudo

unread,
Apr 30, 2021, 11:54:19 AM4/30/21
to GWT Users
I tried it but when I run mvn package
I get error:
Unknown packaging: gwt-app

On Thursday, April 29, 2021 at 3:39:14 PM UTC-5 aka...@gmail.com wrote:

lofid...@gmail.com

unread,
Apr 30, 2021, 12:46:04 PM4/30/21
to GWT Users
Hmm wyrd...

Did you try to download the zip (https://github.com/lofidewanto/gwt-boot-sample-basic/archive/refs/heads/main.zip), unpack it and start in the unpack directory?

mvn gwt:generate-module gwt:devmode

or complete:

mvn net.ltgt.gwt.maven:gwt-maven-plugin:generate-module net.ltgt.gwt.maven:gwt-maven-plugin:devmode

likejudo

unread,
Apr 30, 2021, 12:51:52 PM4/30/21
to GWT Users
I was trying to follow the tutorial so I did not try your other sample yet.
I think the reason is, my employer uses Mojo GWT Maven from Codehaus.
Unless I am mistaken, it does not seem to have gwt-app packaging.

lofid...@gmail.com

unread,
Apr 30, 2021, 1:07:22 PM4/30/21
to GWT Users
Do not use that old GWT Maven plugin... it makes no sense, it is too old and all of the new stuffs in GWT are using TBroyer GWT Maven plugin 😉

It's very good Maven plugin...

lofid...@gmail.com

unread,
Apr 30, 2021, 1:09:28 PM4/30/21
to GWT Users
You can use my zip file and follow the tutorial using that zip file Maven project... 

The GWT Java code like in the tutorial doesn't change at all, only the project structure with TBroyer GWT Maven plugin...

likejudo

unread,
Apr 30, 2021, 1:17:13 PM4/30/21
to GWT Users
  I don't have a choice. I have to use what is in my employer's repository. Mojo GWT Maven plugin 2.90 is in the repo.  

likejudo

unread,
Apr 30, 2021, 2:27:00 PM4/30/21
to GWT Users
Mojo GWT Maven plugin packages as war.
if I package as war, can I still follow the tutorial?

lofid...@gmail.com

unread,
Apr 30, 2021, 3:49:17 PM4/30/21
to GWT Users
I checked the old Maven GWT Plugin... ok it still works for GWT 2.9 but I won't use it anymore. 

If you have to use it here is an example - just the same demo from my example above but use the old Maven plugin: https://github.com/lofidewanto/gwt-old-maven-sample-basic

The Java code is the same but it uses the structure of the old GWT Maven plugin... just take a look at the README of the project above.

Hope this helps.

lofid...@gmail.com

unread,
Apr 30, 2021, 3:52:56 PM4/30/21
to GWT Users
... and yes, you can follow the tutorial with the TBroyer Maven plugin or the Mojo Maven plugin.

The code is the same, only the structure is different... You can compare both:
Lofi

likejudo

unread,
Apr 30, 2021, 4:14:36 PM4/30/21
to GWT Users
thank you - this will be of great help. I will try and let you know.

lofid...@gmail.com

unread,
Apr 30, 2021, 4:15:58 PM4/30/21
to GWT Users
Forget something...

It's wise to separate the "client" and the "server" in two Maven projects. Don't use the example of the Mojo Maven plugin because it mixes the client and server on the same Maven project.

I've once used it mixed (see https://github.com/interseroh/demo-gwt-springboot) but at the end I had a lot of troubles with the classpath. 

Here is an example how you could separate the client and server. At the end your result on the client is JavaScript and you can copy the result to the server part using maven-dependency-pluginhttps://github.com/gwtboot/domino-rest-enum-date

Hope this helps.

likejudo

unread,
May 2, 2021, 2:43:01 PM5/2/21
to GWT Users
At home (on my personal computer not employer workspace, without the restrictions of using only company repository),
I downloaded and ran your example using Broyer plugin. It works. Thank you. 
Then I tried the Ignacio Baca tutorial with maven (using IntelliJ Community Edition).
At step 3 Package, Run and Debug
I get an error

userr@DESKTOP MINGW64 ~/Documents/Learn/gwt/hello-app
$ mvn package
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] Unknown packaging: gwt-app @ line 10, column 14
 @
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project me:hello-app:HEAD-SNAPSHOT (C:\Users\user\Documents\Learn\gwt\hello-app\pom.xml) has 1 error
[ERROR]     Unknown packaging: gwt-app @ line 10, column 14
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:


pom.xml
Unfortunately, google groups strips out the xml formatting.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>me</groupId>
<artifactId>hello-app</artifactId>
<version>HEAD-SNAPSHOT</version>
<packaging>gwt-app</packaging>

<name>hello-app</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt</artifactId>
<version>2.9.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>

<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<groupId>net.ltgt.gwt.maven</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.0.0</version>
<extensions>true</extensions>
<configuration>
<moduleName>me.App</moduleName>
<skipModule>true</skipModule>
</configuration>
</plugin>

<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

I will appreciate suggestions to fix this.

lofid...@gmail.com

unread,
May 2, 2021, 3:23:10 PM5/2/21
to GWT Users
<quote>
At home (on my personal computer not employer workspace, without the restrictions of using only company repository),
I downloaded and ran your example using Broyer plugin. It works. Thank you. 
</quote>

OK, great 👍 

<quote>
At step 3 Package, Run and Debug
I get an error

xxx@xxxx xxxx ~/Documents/Learn/gwt/hello-app
$ mvn package
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] Unknown packaging: gwt-app @ line 10, column 14
</quote>

This is the project... you can download and unzip. I downloaded the project, unzip and did: mvn clean package. It works without errors.

My Java version: java -version
openjdk version "12" 2019-03-19
OpenJDK Runtime Environment AdoptOpenJDK (build 12+33)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 12+33, mixed mode, sharing)

My Maven version: mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: /Users/lofidewanto/Applications/apache-maven-3.3.9
Java version: 12, vendor: AdoptOpenJDK
Java home: /Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home
Default locale: de_DE, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

What Java and Maven version are you using?

Thanks.

lofid...@gmail.com

unread,
May 2, 2021, 3:24:52 PM5/2/21
to GWT Users
Sorry here is the link of the project: https://github.com/ibaca/gsg-hello-app 

Just download and unzip and build it just like my project above... Does this project give the same error?

lofid...@gmail.com

unread,
May 2, 2021, 3:33:08 PM5/2/21
to GWT Users
I think this is the problem:

TBroyer Maven plugin with the extensions using the gwt-app packaging needs to be configured at the 
...
<build>
    <plugins>
        <plugin>
...

<build>
<plugins>

<plugin>
<groupId>net.ltgt.gwt.maven</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.0.0</version>
<extensions>true</extensions>
<configuration>
<moduleName>me.App</moduleName>
<skipModule>true</skipModule>
</configuration>
</plugin>

In your example above it was defined at 
...
<pluginManagement>
     <plugins>
           <plugin>
...

<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<groupId>net.ltgt.gwt.maven</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.0.0</version>
<extensions>true</extensions>
<configuration>

The TBroyer plugin needs to be defined at the "build plugins" and not "pluginManagement plugins"

Hope this helps.

lofid...@gmail.com

unread,
May 2, 2021, 3:42:01 PM5/2/21
to GWT Users
BTW, I never use the packaging type (as you can see in my example above)...

likejudo

unread,
May 2, 2021, 3:45:05 PM5/2/21
to GWT Users
Yes! thank you. I moved the plugin to build. It works now.

lofid...@gmail.com

unread,
May 2, 2021, 3:51:00 PM5/2/21
to GWT Users
Great 👍 Have fun... and again you can still follow the tutorial here: http://www.gwtproject.org/doc/latest/tutorial/gettingstarted.html

What different is just the "build tool" and therefore the "project structure". You have a much modern style using Maven GWT plugin from TBroyer... Still you also can use the older Maven GWT Mojo plugin... or also Ant like in the tutorial above... But this is really old 😅

Enjoy!

likejudo

unread,
May 2, 2021, 7:35:28 PM5/2/21
to GWT Users
Yes, I will need to follow the GWT tutorial because I have to write a UI with  tabs and combo boxes and buttons and panels using GWT and Mojo Maven plugin.
I am wondering why those in charge of GWT Project do not update the project docs with this better way you all have here.
Even the Eclipse plugin uses the older version of 2.8.1

likejudo

unread,
May 2, 2021, 8:22:31 PM5/2/21
to GWT Users
for debugging, the tutorial says: "... should see the Java file in the browser"
I do not see it at all - only JS files.

On Sunday, May 2, 2021 at 2:51:00 PM UTC-5 lofid...@gmail.com wrote:

lofid...@gmail.com

unread,
May 3, 2021, 9:40:46 AM5/3/21
to GWT Users
<quote>
I am wondering why those in charge of GWT Project do not update the project docs with this better way you all have here.
Even the Eclipse plugin uses the older version of 2.8.1
</quote>

Yes, you are right... Someone has to take care of that. I'll wait for my next holidays to update the docs... Actually I already made a clone but never managed to work on that part... ;-)

<quote>
for debugging, the tutorial says: "... should see the Java file in the browser"
I do not see it at all - only JS files.
</quote>

Did you try in Google Chrome like in this description? https://github.com/lofidewanto/gwt-boot-sample-basic --- Step 3 - Debug the App in your Browser

likejudo

unread,
May 3, 2021, 12:13:51 PM5/3/21
to GWT Users
Ok, I did not realize the Java file was under sourcemaps. It works now. Thanks,

lofid...@gmail.com

unread,
May 3, 2021, 12:38:05 PM5/3/21
to GWT Users
Great, have fun... and give us your feedback here to see whether GWT fits your requirements... ;-)

likejudo

unread,
May 6, 2021, 2:32:48 PM5/6/21
to GWT Users
I implemented Stockwatcher tutorial using Maven, following the hello app from Lofi and Ibaca's tuorials.
Now I want to implement the server side part of the tutorial. 
In my pom.xml I have
<packaging>gwt-app</packaging>

Do I need to change it to war?

<packaging>war</packaging>

Will that affect things?

lofid...@gmail.com

unread,
May 6, 2021, 3:17:11 PM5/6/21
to GWT Users
OK, now the server part 😉👍

For the server part you can just build a standard server project. You should build a new Maven server project. So if you are finished with the client project, just leave it like that... and build a new Maven server project.

For the server part you have some choices:
  • Spring Boot webapp
  • JakartaEE webapp with Tomcat / Jetty
  • Quarkus, Micronaut
  • PHP
  • NodeJS
  • ASP.NET
  • ...
If you want to use Java and Spring Boot you can just build a new Maven Spring Boot project with Spring Initialzr: https://start.spring.io
 
After that you need to take care of the communication between web browser client with GWT,  which you've done before and the Spring Boot server part... remember this is a "remote call" since your web browser is on a different machine than your Spring Boot server.

Your choices: 
Today everyone use REST but IMHO GWT RPC is very nice for Java developers.

REST example using Domino REST: https://github.com/gwtboot/domino-rest-enum-date
Here you can see 3 Maven projects: "client", "api" and "server". So far you've done the "client" and now you need the "server" and "api" (also called "shared", because this project is shared between "client "and "server").

Using GWT RPC is actually quite the same. You also need api / shared and server but you will use standard Servlet GWT / RPC instead of REST JSON.

If you need the structure for GWT RPC with Spring Boot just tell me... I have no demo available, but could do this easily.

Another way is just to use JakartaEE web app with Tomcat or Jetty. In this case you could use the TBroyer Maven Archetype to create the project structure: https://github.com/tbroyer/gwt-maven-archetypes

Or you also could use the Maven Archetype GWT Spring Boot from Frank: https://github.com/NaluKit/gwt-maven-springboot-archetype to create the project structure for Spring Boot and GWT. Actually similar to my GWT Spring Boot example above but still different in how it works together...

That's a lot alternatives, ahh... I have to admit, that makes the introduction in GWT a bit difficult because of the alternatives...

My way was and is: 
  • Separate the client, api / shared and server as Maven projects / modules 
  • Build the server part completely independent of GWT like I showed above
  • Build the communication between them with the alternatives above
  • ... and always remember: the result of GWT transpiler is JavaScript, so you could always take the JavaScript with its resources and "copy" it to your server part, so it will be served from your server part. 
  • ... but still remember: JavaScript runs on web browser so you always have remote call to your server part.
Hope this helps,
Lofi

likejudo

unread,
May 6, 2021, 5:17:44 PM5/6/21
to GWT Users
Thank you for your reply.
I need to build the client and server and package as a war using tomcat or jetty. I don't want a separate Spring Boot server.
The Stockbroker tutorial had both server and client in one war file.
Perhaps I should just manually create the war, WEB-INF folders and then change the pom.xml packaging to war - will that work?
As always, appreciate your help.

lofid...@gmail.com

unread,
May 6, 2021, 5:24:07 PM5/6/21
to GWT Users
Then just do this Maven archetype from TBroyer:

mvn archetype:generate -DarchetypeGroupId=net.ltgt.gwt.archetypes -DarchetypeVersion=LATEST -DarchetypeArtifactId=modular-webapp


and then take a look here how to start: https://github.com/tbroyer/gwt-maven-archetypes

......
Start the development mode

Change directory to your generated project and issue the following commands:

  1. In one terminal window: mvn gwt:codeserver -pl *-client -am
  2. In another terminal window: mvn jetty:run -pl *-server -am -Denv=dev

Or if you'd rather use Tomcat than Jetty, use mvn tomcat7:run instead of mvn jetty:run.

Note that the -pl and -am are not strictly necessary, they just tell Maven not to build the client module when you're dealing with the server one, and vice versa.

........

Hope this helps,
Lofi

likejudo

unread,
May 7, 2021, 8:52:05 AM5/7/21