Announcement for the GWT 2.12 release

511 views
Skip to first unread message

Colin Alworth

unread,
Oct 29, 2024, 10:22:14 AM10/29/24
to GWT Users
GWT 2.12 is here!

Highlights:
  • Added support for Java 12-17 language features, including text blocks, instanceof pattern matching, records, and switch expressions.
  • Minimum Java version 11 is required to run any dev tools, though the server code should continue to function with Java 8 for this release. Later versions may no longer support Java 8. Tested to run on Java 11-23.
  • Added support for sourcemaps to include the contents of the sources files.
  • Enabled sourcemaps by default in all browsers
  • Fix CSP issues in linkers and dev mode, provide CSP workarounds for GWT-RPC payloads
This was a shorter release cycle than we've done in the past, and we're taking steps to simplify some of the processes we use, while still ensuring that projects can continue to update with a minimum of friction. Thanks to our testers, reviewers, committers in this release! A short list of the names that helped bring us this release: Ahmad Bawaneh, Michael S., Dmitrii Tikhomirov, Zbynek Konecny, Paul Kintner, George Paret, Daniel Portmann, Frank Hossfeld, Joan Pablo Gardella, Jens Nehlmeier, Thomas Broyer,

Join us on the issue tracker or at our OpenCollective page to help make future releases.possible.

 

Ralph Fiergolla

unread,
Oct 29, 2024, 11:06:12 AM10/29/24
to google-we...@googlegroups.com
A big thank you for your work! 

(GWT user since 2011 and still excited!)

--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-tool...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-web-toolkit/bd4781d8-52c8-4e12-a3af-7c830b0cd553n%40googlegroups.com.

George Paret

unread,
Oct 29, 2024, 9:31:28 PM10/29/24
to GWT Users
Just wanted to say thank you to all developers who made this happen. Much appreciated.

am...@mun.co.il

unread,
Oct 31, 2024, 12:38:12 PM10/31/24
to GWT Users
Thank you!

Thomas Broyer

unread,
Oct 31, 2024, 6:19:37 PM10/31/24
to GWT Users
Fyi, gwt-maven-archetypes have been updated (version 2024.10.31) with GWT 2.12 (and Maven plugins each updated to their latest version)
Message has been deleted

Frank Hossfeld

unread,
Nov 1, 2024, 12:41:37 PM11/1/24
to GWT Users
Fyi, gwt-maven-springboot-archetype have been updated (version 2024.11.1) with GWT 2.12 and Spring Boot 3.3.5

Craig Mitchell

unread,
Nov 3, 2024, 4:24:03 AM11/3/24
to GWT Users
Woohoo!  Upgrade went flawlessly.  Thank you to all involved!

@Frank  The work done in this PR https://github.com/NaluKit/gwt-maven-springboot-archetype/pull/8 can be either removed, or maybe we want to upgrade the server to Java 21, and the client to Java 17.

lofid...@gmail.com

unread,
Nov 4, 2024, 5:42:12 AM11/4/24
to GWT Users
Great work to the team, congrats!

Lofi

Frank Hossfeld

unread,
Nov 4, 2024, 6:11:55 AM11/4/24
to GWT Users
I think, updating client and server to Java 17 might be enough. Spring Boot 3 at least requires Java 17. If someone is willing to use Java 21 on the server, it is possible by updating it. @Craig: What do you think?

Frank

unread,
Nov 5, 2024, 5:50:55 AM11/5/24
to GWT Users
Thanks!

Op maandag 4 november 2024 om 12:11:55 UTC+1 schreef Frank Hossfeld:

Craig Mitchell

unread,
Nov 5, 2024, 9:21:08 PM11/5/24
to GWT Users
> I think, updating client and server to Java 17 might be enough. Spring Boot 3 at least requires Java 17. If someone is willing to use Java 21 on the server, it is possible by updating it. @Craig: What do you think?

Agreed.  PR:  https://github.com/NaluKit/gwt-maven-springboot-archetype/pull/21

Cheers.

lofid...@gmail.com

unread,
Nov 11, 2024, 5:06:34 PM11/11/24
to GWT Users
Just write a short article about the release of GWT 2.12: 

Bob Lacatena

unread,
Nov 15, 2024, 4:20:58 PM11/15/24
to GWT Users
I switched 2 of my projects from 2.11.0 to 2.12.1, and got an InternalCompilerException error on both when running in Eclipse with the GWT plugin.

Unrelated to that (or maybe it is), I was having another problem I was hoping to get some direction on.  I will post it separately in its own thread, though.

GET /recompile/com.insightxp.i2g.I2g

Job com.insightxp.i2g.I2g_1_0

starting job: com.insightxp.i2g.I2g_1_0

binding: locale=en

binding: user.agent=safari

Compiling module com.insightxp.i2g.I2g

[ERROR] An internal compiler exception occurred

com.google.gwt.dev.jjs.InternalCompilerException: Unexpected error during visit.

at com.google.gwt.dev.jjs.ast.JVisitor.translateException(JVisitor.java:111)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:276)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)

at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:118)

at com.google.gwt.dev.jjs.ast.JCastOperation.traverse(JCastOperation.java:76)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

Colin Alworth

unread,
Nov 15, 2024, 4:25:32 PM11/15/24
to GWT Users
Could you share the full stack trace of any errors? This exception appears to be truncated. We do have two new, Java17-specific errors, but there isn't enough information here to see if it is related to a known issue.

It might also be helpful to compile for production instead of running in super dev mode - the stack trace is sometimes more useful that way, by giving better context of what was attempting to be compiled.

Can either discuss here briefly or just go ahead and file the issues you've encountered, and we can triage on the issue tracker.

Bob Lacatena

unread,
Nov 15, 2024, 4:33:26 PM11/15/24
to GWT Users
Sorry, I realized the caused by part of it was more important.  Here's the whole thing.

I just ran a gradle build (after first manually deleting all cached stuff so it would be clean), and that said it completed fine... the error happens when I visit the page.  I am going to try now to run the build on the server and test the deployed app.  I'll get back to you on that.

I meant to ask before.. should I file this as an issue in GitHub?  I assume that's how you work, but thought I'd confirm first.

GET /recompile/com.insightxp.i2g.I2g

Job com.insightxp.i2g.I2g_1_0

starting job: com.insightxp.i2g.I2g_1_0

binding: locale=en

binding: user.agent=safari

Compiling module com.insightxp.i2g.I2g

[ERROR] An internal compiler exception occurred

com.google.gwt.dev.jjs.InternalCompilerException: Unexpected error during visit.

at com.google.gwt.dev.jjs.ast.JVisitor.translateException(JVisitor.java:111)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:276)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)

at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:118)

at com.google.gwt.dev.jjs.ast.JCastOperation.traverse(JCastOperation.java:76)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)

at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:118)

at com.google.gwt.dev.jjs.ast.JBinaryOperation.traverse(JBinaryOperation.java:89)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)

at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:118)

at com.google.gwt.dev.jjs.ast.JExpressionStatement.traverse(JExpressionStatement.java:42)

at com.google.gwt.dev.jjs.ast.JModVisitor$ListContext.traverse(JModVisitor.java:88)

at com.google.gwt.dev.jjs.ast.JModVisitor.acceptWithInsertRemove(JModVisitor.java:331)

at com.google.gwt.dev.jjs.ast.JBlock.traverse(JBlock.java:94)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)

at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:139)

at com.google.gwt.dev.jjs.ast.JIfStatement.traverse(JIfStatement.java:53)

at com.google.gwt.dev.jjs.ast.JModVisitor$ListContext.traverse(JModVisitor.java:88)

at com.google.gwt.dev.jjs.ast.JModVisitor.acceptWithInsertRemove(JModVisitor.java:331)

at com.google.gwt.dev.jjs.ast.JBlock.traverse(JBlock.java:94)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)

at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:139)

at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:135)

at com.google.gwt.dev.jjs.ast.JMethodBody.traverse(JMethodBody.java:83)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)

at com.google.gwt.dev.jjs.ast.JMethod.visitChildren(JMethod.java:786)

at com.google.gwt.dev.jjs.ast.JMethod.traverse(JMethod.java:778)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)

at com.google.gwt.dev.jjs.impl.UnifyAst.mainLoop(UnifyAst.java:1407)

at com.google.gwt.dev.jjs.impl.UnifyAst.exec(UnifyAst.java:902)

at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.unifyJavaAst(JavaToJavaScriptCompiler.java:1404)

at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.constructJavaAst(JavaToJavaScriptCompiler.java:1216)

at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:1131)

at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:257)

at com.google.gwt.dev.Precompile.precompile(Precompile.java:243)

at com.google.gwt.dev.Precompile.precompile(Precompile.java:190)

at com.google.gwt.dev.Precompile.precompile(Precompile.java:131)

at com.google.gwt.dev.Compiler.compile(Compiler.java:192)

at com.google.gwt.dev.codeserver.Recompiler.doCompile(Recompiler.java:362)

at com.google.gwt.dev.codeserver.Recompiler.compile(Recompiler.java:175)

at com.google.gwt.dev.codeserver.Recompiler.recompile(Recompiler.java:134)

at com.google.gwt.dev.codeserver.Outbox.recompile(Outbox.java:135)

at com.google.gwt.dev.codeserver.JobRunner.recompile(JobRunner.java:113)

at com.google.gwt.dev.codeserver.JobRunner.access$000(JobRunner.java:37)

at com.google.gwt.dev.codeserver.JobRunner$2.run(JobRunner.java:90)

at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)

at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)

at java.base/java.lang.Thread.run(Thread.java:842)

Caused by: java.lang.NoSuchMethodError: 'void com.google.gwt.thirdparty.guava.common.base.Preconditions.checkState(boolean, java.lang.String, java.lang.Object)'

at com.google.gwt.safehtml.rebind.HtmlTemplateParser.getHtmlContextFromParseState(HtmlTemplateParser.java:269)

at com.google.gwt.safehtml.rebind.HtmlTemplateParser.parseTemplate(HtmlTemplateParser.java:205)

at com.google.gwt.safehtml.rebind.SafeHtmlTemplatesImplMethodCreator.emitMethodBodyFromTemplate(SafeHtmlTemplatesImplMethodCreator.java:220)

at com.google.gwt.safehtml.rebind.SafeHtmlTemplatesImplMethodCreator.createMethodFor(SafeHtmlTemplatesImplMethodCreator.java:120)

at com.google.gwt.safehtml.rebind.SafeHtmlTemplatesImplCreator.emitMethodBody(SafeHtmlTemplatesImplCreator.java:43)

at com.google.gwt.user.rebind.AbstractGeneratorClassCreator.genMethod(AbstractGeneratorClassCreator.java:277)

at com.google.gwt.user.rebind.AbstractGeneratorClassCreator.emitMethods(AbstractGeneratorClassCreator.java:239)

at com.google.gwt.user.rebind.AbstractGeneratorClassCreator.emitClass(AbstractGeneratorClassCreator.java:118)

at com.google.gwt.safehtml.rebind.SafeHtmlTemplatesGenerator.generate(SafeHtmlTemplatesGenerator.java:65)

at com.google.gwt.core.ext.IncrementalGenerator.generateNonIncrementally(IncrementalGenerator.java:40)

at com.google.gwt.dev.javac.StandardGeneratorContext.runGeneratorIncrementally(StandardGeneratorContext.java:745)

at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:103)

at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:78)

at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:262)

at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:251)

at com.google.gwt.dev.PrecompilationContextCreator$1.getAllPossibleRebindAnswers(PrecompilationContextCreator.java:86)

at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.createStaticRebindExpression(UnifyAst.java:525)

at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.createRebindExpression(UnifyAst.java:493)

at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.maybeHandleMagicMethodCall(UnifyAst.java:421)

at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.visit(UnifyAst.java:408)

at com.google.gwt.dev.jjs.ast.JMethodCall.traverse(JMethodCall.java:265)

at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)

at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)

... 58 more

[ERROR] at ClippedImageImpl.java(106): GWT.create(ClippedImageImpl$DraggableTemplate.class)

com.google.gwt.dev.jjs.ast.JMethodCall

[ERROR] at ClippedImageImpl.java(106): (ClippedImageImpl$DraggableTemplate) GWT.create(ClippedImageImpl$DraggableTemplate.class)

com.google.gwt.dev.jjs.ast.JCastOperation

[ERROR] at ClippedImageImpl.java(106): ClippedImageImpl.draggableTemplate = (ClippedImageImpl$DraggableTemplate) GWT.create(ClippedImageImpl$DraggableTemplate.class)

com.google.gwt.dev.jjs.ast.JBinaryOperation

[ERROR] at ClippedImageImpl.java(106): ClippedImageImpl.draggableTemplate = (ClippedImageImpl$DraggableTemplate) GWT.create(ClippedImageImpl$DraggableTemplate.class)

com.google.gwt.dev.jjs.ast.JExpressionStatement

[ERROR] at ClippedImageImpl.java(105): {

ClippedImageImpl.draggableTemplate = (ClippedImageImpl$DraggableTemplate) GWT.create(ClippedImageImpl$DraggableTemplate.class);

}

com.google.gwt.dev.jjs.ast.JBlock

[ERROR] at ClippedImageImpl.java(105): if (ClippedImageImpl.draggableTemplate == null) {

ClippedImageImpl.draggableTemplate = (ClippedImageImpl$DraggableTemplate) GWT.create(ClippedImageImpl$DraggableTemplate.class);

}

com.google.gwt.dev.jjs.ast.JIfStatement

[ERROR] at ClippedImageImpl.java(103): {

if (ClippedImageImpl.draggableTemplate == null) {

ClippedImageImpl.draggableTemplate = (ClippedImageImpl$DraggableTemplate) GWT.create(ClippedImageImpl$DraggableTemplate.class);

}

return ClippedImageImpl.draggableTemplate;

}

com.google.gwt.dev.jjs.ast.JBlock

[ERROR] at ClippedImageImpl.java(103): {

if (ClippedImageImpl.draggableTemplate == null) {

ClippedImageImpl.draggableTemplate = (ClippedImageImpl$DraggableTemplate) GWT.create(ClippedImageImpl$DraggableTemplate.class);

}

return ClippedImageImpl.draggableTemplate;

}

com.google.gwt.dev.jjs.ast.JMethodBody

[ERROR] at ClippedImageImpl.java(103): com.google.gwt.user.client.ui.impl.ClippedImageImpl.getDraggableTemplate()Lcom/google/gwt/user/client/ui/impl/ClippedImageImpl$DraggableTemplate;

com.google.gwt.dev.jjs.ast.JMethod

[ERROR] Compiler returned false

[WARN] recompile failed

[WARN] continuing to serve previous version


Colin Alworth

unread,
Nov 15, 2024, 4:37:46 PM11/15/24
to GWT Users
You have a mixed classpath of old and new GWT somehow. Verify both that gwt-user and gwt-dev match their version, and that you aren't mixing org.gwtproject and com.google.gwt groupIds (use the gwt BOM/platform dependencies to ensure this is resolved).

Bob Lacatena

unread,
Nov 15, 2024, 4:48:13 PM11/15/24
to GWT Users
I think that's it... I found a stray.  Also, it built and ran fine on the server.  The stray is in the dependencies in the GWT run config, automatically added because it was lying around in web/WEB-INF/lib.  Thanks for the clues.

Bob Lacatena

unread,
Nov 15, 2024, 5:51:23 PM11/15/24
to GWT Users
That did it, and switching to 2.12.1 solved the other problem I was having (out of memory error looking like it was due to some sort of recursive calls in GWT compilation triggered by I don't know what).  I just got lucky that I was coming here to ask for help on that, saw 2.12.1, and thought, "gee, I wonder if it's a bug they already fixed..."

Thanks again for your help.  Does the GWT Project have a Donate button somewhere?

Colin Alworth

unread,
Nov 15, 2024, 8:37:54 PM11/15/24
to GWT Users
We have an OpenCollective at https://opencollective.com/gwt-project - we mention it on release announcements, but don't emphasize it much beyond that.

Michael Conrad

unread,
Nov 18, 2024, 2:39:24 PM11/18/24
to google-we...@googlegroups.com

Would it be a good idea to have a donate link added to the footer of mailing list emails?

On 11/15/24 20:37, Colin Alworth wrote:
We have an      - we mention it on release announcements, but don't emphasize it much beyond that.
--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-tool...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages