I am aligned with controlling the transitive dependencies versions on a top
level module, as I faced such complexities and used the same approach, in
groups of solutions.
Particularly with overlapping dependency chains and SpringBoot , I had to
override the Jetty versions among others in parent Maven modules.
I am guessing Gradle can do similar but I think it is known for its
fragility in my point of view.
I hope this helps.
On Saturday, 14 February 2026 at 15:51:28 UTC Colin Alworth wrote:
> That's an irritating outcome for sure - though updating GWT to Jetty
> 12.1.5 only punts on the issue, since the next time Spring Boot wants a
> different Jetty version (or some other library) we end up back in this mess
> (though likely with a much more subtle failure mode).
>
> Gradle does a much better job at letting you break up classpaths here, at
> the cost of dramatically increased complexity in the worst case - but it
> could allow you to specify each bom in its own classpath configuration,
> rather than mix the two together.
>
> I think I have a solution that works for your project, but I'm going to
> try to reason it out here a bit, so someone can poke holes in my logic:
>
> - The GWT wiring here is configured for the parent project pom, so
> that the plugin can run from there if desired.
> - The server BOM is also declared in the parent project pom, so that
> we just have it in one place. This probably makes sense for large enough
> projects where it needs to be reused - but at least for this project it
> seems unnecessary.
>
> What I did was to move the jetty bom into test-server:
> diff --git a/pom.xml b/pom.xml
> index bb3edc3..ae118dc 100644
> --- a/pom.xml
> +++ b/pom.xml
> @@ -24,13 +24,6 @@
> <type>pom</type>
> <scope>import</scope>
> </dependency>
> - <dependency>
> - <groupId>org.springframework.boot</groupId>
> - <artifactId>spring-boot-dependencies</artifactId>
> - <version>${spring-boot.version}</version>
> - <type>pom</type>
> - <scope>import</scope>
> - </dependency>
> <dependency>
> <groupId>org.yaml</groupId>
> <artifactId>snakeyaml</artifactId>
> diff --git a/test-server/pom.xml b/test-server/pom.xml
> index 6dbf708..31426c0 100644
> --- a/test-server/pom.xml
> +++ b/test-server/pom.xml
> @@ -16,6 +16,17 @@
> <maven.compiler.target>17</maven.compiler.target>
> </properties>
>
> + <dependencyManagement>
> + <dependencies>
> + <dependency>
> + <groupId>org.springframework.boot</groupId>
> + <artifactId>spring-boot-dependencies</artifactId>
> + <version>${spring-boot.version}</version>
> + <type>pom</type>
> + <scope>import</scope>
> + </dependency>
> + </dependencies>
> + </dependencyManagement>
> <dependencies>
> <dependency>
> <groupId>${project.groupId}</groupId>
>
> Then, I was able to build and start the server, and start the devmode
> server. I did not go so far as to make changes yet, but I'm not familiar
> with how spring boot likes to work for "dev" mode.
>
> On Friday, February 13, 2026 at 4:55:11 PM UTC-6 [email protected]
> wrote:
>
>> I raised a Spring Boot Jetty issue
>> https://github.com/spring-projects/spring-boot/issues/49220 because I
>> thought there was an issue with Jetty.
>>
>> Turns out, the GWT Code Server is bringing in an old version of Jetty
>> which breaks Spring Boot.
>>
>> When I tell Spring Boot to use the version of Jetty it wants, the GWT
>> Code Server then breaks with the error:
>>
>> [WARNING] java.lang.NoClassDefFoundError:
>> org/eclipse/jetty/server/handler/ContextHandler$Context
>> [WARNING] at
>> com.google.gwt.dev.codeserver.WebServer.start(WebServer.java:125)
>> [WARNING] at
>> com.google.gwt.dev.codeserver.CodeServer.start(CodeServer.java:162)
>> [WARNING] at
>> com.google.gwt.dev.codeserver.CodeServer.main(CodeServer.java:104)
>> [WARNING] at
>> com.google.gwt.dev.codeserver.CodeServer.main(CodeServer.java:55)
>> [WARNING] Caused by: java.lang.ClassNotFoundException:
>> org.eclipse.jetty.server.handler.ContextHandler$Context
>> [WARNING] at
>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
>> [WARNING] at
>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
>> [WARNING] at
>> java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
>> [WARNING] ... 4 more
>> [INFO]
>> ------------------------------------------------------------------------
>> [INFO] Reactor Summary for test 1.0-SNAPSHOT:
>> [INFO]
>> [INFO] test ............................................... FAILURE [
>> 4.688 s]
>> [INFO] test-shared ........................................ SKIPPED
>> [INFO] test-client ........................................ SKIPPED
>> [INFO]
>> ------------------------------------------------------------------------
>> [INFO] BUILD FAILURE
>> [INFO]
>> ------------------------------------------------------------------------
>> [INFO] Total time: 5.436 s
>> [INFO] Finished at: 2026-02-14T09:25:21+11:00
>> [INFO]
>> ------------------------------------------------------------------------
>> [ERROR] Failed to execute goal
>> net.ltgt.gwt.maven:gwt-maven-plugin:1.2.0:codeserver (default-cli) on
>> project test: Process exited with an error: 1 (Exit value: 1) -> [Help 1]
>>
>> Is there a way to allow Spring Boot to use Jetty 12.1.5, but also let the
>> GWT Code Server use Jetty 9.4.58?
>>
>> (Apologies if this has been asked before, I searched around and couldn't
>> find it)
>>
>
--
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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/google-web-toolkit/1add89dd-49dc-47c0-b3dd-010dc94f1db3n%40googlegroups.com.