Skip to content

Commit ed71e6a

Browse files
cmoulliardgastaldi
andauthored
Draft of the Empower your AI migrations to Quarkus with Skills blog (#2660)
* Draft of the Empower your AI migrations to Quarkus with Skills blog Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * First draft of the blog post. Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Add cmoulliard author Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Review the blog post: Empower your AI migrations to Quarkus with Skills. Add images Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Change the column size of the module name and responsability using % Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Add link to npx skills tool Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Review the wording. Phase 1 Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Remove the name of Aurea as only one author can be defined Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Update _posts/2026-05-26-ai-skills-migration.adoc Co-authored-by: George Gastaldi <gegastaldi@gmail.com> * Set the indivual tags to migrate to one: migrate-spring-to-quarkus Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * Remove mcp references non needed for this blog post Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> * bump date Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> --------- Signed-off-by: Charles Moulliard <cmoulliard@ibm.com> Co-authored-by: George Gastaldi <gegastaldi@gmail.com>
1 parent c87b96a commit ed71e6a

13 files changed

Lines changed: 206 additions & 0 deletions

_data/authors.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,13 @@ aureamunoz:
353353
job_title: "Senior Software Engineer"
354354
twitter: "auritamh"
355355
bio: "Works on Quarkus and SmallRye at Red Hat"
356+
cmoulliard:
357+
name: "Charles Moulliard"
358+
email: "cmoulliard@ibm.com"
359+
emailhash: "a13e1afd9920c8ae376d646061d1d8e2"
360+
job_title: "Senior Principal Software Engineer"
361+
twitter: "cmoulliard"
362+
bio: "Open source contributor and technical leader working at IBM on Quarkus, Spring migration tooling, Kubernetes related projects."
356363
edeandrea:
357364
name: "Eric Deandrea"
358365
email: "eric.deandrea@ibm.com"
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
---
2+
layout: post
3+
title: 'Empower your AI migrations to Quarkus with Skills'
4+
date: 2026-06-03
5+
tags: ai, skill, agent, migrate-spring-to-quarkus
6+
synopsis: 'Empower your AI migrations to Quarkus with Skills. Transform your AI agent into a framework domain: dependencies, jpa, web, etc expert capable of migrating Spring applications.'
7+
author: cmoulliard
8+
---
9+
:imagesdir: /assets/images/posts/ai-skills-migration
10+
11+
== What are Skills?
12+
13+
https://agentskills.io/specification[Skills] are an open standard for packaging reusable instructions that teach AI coding agents how to perform specialized tasks. A Skill is simply a directory containing a `SKILL.md` file -- a Markdown document with YAML header describing what it does and when to trigger it, followed by step-by-step instructions the agent must follow.
14+
15+
Skills follow a progressive disclosure model that optimizes context window usage across all installed skills: agents load only the metadata at startup, pull in the full instructions when the skill triggers, and fetch reference files on AI's demand. This keeps context usage efficient while giving the agent deep domain knowledge exactly when it needs it.
16+
17+
The Quarkus project maintains its own collection of Skills in the https://github.com/quarkusio/skills[quarkusio/skills] repository. These Skills transform a general-purpose coding agent into a Quarkus expert, capable of creating projects, upgrading versions, and -- as we will explore in this post -- migrating entire Spring Boot applications to Quarkus.
18+
19+
== Why use AI Skills for migration?
20+
21+
Migrating an application from one framework to another is a task that is complex and require deep knowledge about the technology used. Consider a Spring Boot to Quarkus migration: you need to rewrite the maven or Gradle build file, swap annotations (`@Autowired` to `@Inject`, `@RestController` to JAX-RS resources), convert configuration properties, refactor the Web layer to move to Qute, and more. Each of these steps follows well-known mapping rules, but the sheer number of files and the subtle interactions between them make manual migration tedious and error-prone.
22+
23+
This is where AI agents shine -- they can apply transformation rules across an entire codebase methodically. But a generic agent lacks the framework-specific knowledge to make the right choices. It might produce code that compiles but does not follow Quarkus development best practices, or it might miss a critical dependency swap.
24+
25+
Skills bridge that gap. By giving the agent a curated set of instructions, reference mappings, and gate checks, you get the best of both worlds: the tireless execution of an AI agent guided by the deep domain expertise encoded in the Skill. The result is a migration that is fast, consistent, and with few errors.
26+
27+
== How we designed the migration Skill
28+
29+
The https://github.com/quarkusio/skills/tree/main/skills/migrate-spring-to-quarkus[migrate-spring-to-quarkus] Skill uses a *modular, domain-based approach with gate checks*. Rather than one monolithic script, the migration is broken into independent modules, each responsible for a specific technical domain:
30+
31+
[cols="20%,80%",options="header"]
32+
|===
33+
| Module | Responsibility
34+
35+
| `jdk`
36+
| Enforce JDK 21+ compatibility
37+
38+
| `build`
39+
| Migrate `pom.xml` or `build.gradle` -- swap Spring starters for Quarkus extensions, update plugins, adjust the BOM
40+
41+
| `code`
42+
| Convert Spring annotations to their CDI/JAX-RS/Quarkus equivalents (`@Component`, `@Autowired`, `@RestController`, `@Repository`, etc.)
43+
44+
| `frontend`
45+
| Migrate Thymeleaf or JSP views to Quarkus-compatible alternatives and update static resource paths
46+
47+
| `testing`
48+
| Convert `@SpringBootTest` to `@QuarkusTest`, replace `@MockBean` with Quarkus mocking utilities
49+
50+
| `cleanup`
51+
| Remove leftover Spring artifacts, unused imports, and stale configuration
52+
|===
53+
54+
Each https://github.com/quarkusio/skills/tree/main/skills/migrate-spring-to-quarkus/modules[module] follows the same disciplined cycle: *Evaluate gate -> Load reference files -> Execute transformations -> Compile -> Verify*. A module only runs if its gate condition is met.
55+
56+
For example, the `frontend` module is skipped entirely if the project has no Thymeleaf or JSP templates. If compilation fails after a module completes, the agent stops immediately -- no cascading errors.
57+
58+
Different https://github.com/quarkusio/skills/tree/main/skills/migrate-spring-to-quarkus/references[reference] files help the AI model to better understand the transformations to apply:
59+
60+
- `dependency-map.md` -- maps Spring Boot starters to their Quarkus extension equivalents
61+
- `annotation-map.md` -- maps Spring annotations to JAX-RS, CDI, and Quarkus annotations
62+
- `config-map.md` -- maps `application.properties` / `application.yml` keys between frameworks
63+
64+
This design ensures that the migration is *transparent* (every decision is documented), *safe* (the build is verified after each phase), and *extensible* (you can add new modules or override reference mappings for your specific project).
65+
66+
== How to run a Spring-to-Quarkus migration
67+
68+
=== Step 1: Install the Skill
69+
70+
We use https://claude.ai/download[Claude Code] as our agent in this walkthrough, but you can use any agent that supports Skills (Cursor, Windsurf, Cline, OpenCode and https://agentskills.io/clients[many others]).
71+
72+
Install the migration Skill using https://github.com/vercel-labs/skills[`npx skills`]:
73+
74+
[source,bash]
75+
----
76+
npx skills add quarkusio/skills --skill migrate-spring-to-quarkus
77+
----
78+
79+
This downloads the Skill files into your project's `.claude/skills/` directory (for Claude Code). To install it globally so it is available across all your projects, add the `-g` flag:
80+
81+
[source,bash]
82+
----
83+
npx skills add quarkusio/skills --skill migrate-spring-to-quarkus -g
84+
----
85+
86+
TIP: You can also install all available Quarkus Skills at once with the command: `npx skills add quarkusio/skills`.
87+
88+
=== Step 2: Start the migration
89+
90+
Open a terminal and navigate to your Spring Boot project (Petclinic, TODO, etc) to be migrated and launch your agent.
91+
92+
image::01-project-to-migrate.png[alt=Application to migrate, align=left, width=60%]
93+
94+
TIP: Don't forget to configure the agent authentication mode using the API Key and/or subscription according to the provider before to launch it !
95+
96+
Then ask the agent to start the migration using the following tailored prompt:
97+
98+
[source]
99+
----
100+
claude "Migrate this Spring Boot project to Quarkus using the full migration strategy.
101+
Work entirely within this directory.
102+
Do a full migration — convert all source files, build files, config, and tests.
103+
After migration, verify the project compiles with ./mvnw compile and fix any errors.
104+
Then run ./mvnw test and fix any test failures.
105+
If you need to delete code or files, explain why you are deleting them and what you are replacing them with.
106+
If anything could not be converted/migrated explain why - do not just delete/remove it without explaining.
107+
Include a summary of the migration in the end of the output."
108+
----
109+
110+
NOTE: The https://github.com/quarkusio/skills/tree/main/skills/migrate-spring-to-quarkus[migrate-spring-to-quarkus] skill supports 2 migration strategies: full - Quarkus native or https://quarkus.io/guides/#q=spring[Spring Compatibility].
111+
112+
The agent selects the correct installed skill by matching the phrase 'Migrate this Spring Boot' from the user's prompt with the skill's description.
113+
114+
.Skill invocation
115+
image::03-skill-invocation.png[alt="skill invocation",align=left, width=80%]
116+
117+
=== Step 3: Analysis and strategy selection
118+
119+
The agent first scans the application using different tools executed locally and presents to the user a summary:
120+
121+
.AI analysis overview
122+
image::04-analysis-overview.png[alt="analysis overview",align=left, width=80%]
123+
124+
NOTE: The summary includes the strategy defined part of the user's prompt to be executed. This means that AI will replace all Spring annotations with JAX-RS/CDI/Panache equivalents using the instructions of the modules: code, web, etc.
125+
126+
=== Step 4: Module selection and execution
127+
128+
As preamble to execute the set of the instructions, AI will report that it will now read the different "references" files and load the https://github.com/quarkusio/skills/blob/main/skills/migrate-spring-to-quarkus/SKILL.md#step-3-execute-modules[modules] to get the instructions:
129+
130+
.Skill load the modules
131+
image::05-skill-load-modules.png[alt="skill load modules",align=left, width=80%]
132+
133+
As mentioned at the beginning of the blog, the module's instructions will be selected only if the condition declared part of the GATE CHECK is passing.
134+
135+
TIP: By looking to the "Gate result", you can immediately see which module has been selected and is currently processed
136+
137+
.Gate JDK check
138+
image::06-gate-check.png[alt="Gate JDK check",align=left, width=70%]
139+
140+
The agent populates a list of "check boxes" corresponding to the list of the modules and will change the symbols during the migration process.
141+
142+
.Module Build System
143+
image::08-module-build-executed.png[alt="Module Build system",align=left, width=85%]
144+
145+
Here are the messages that we got by example during the execution of the module "Code" where Spring annotations have been discovered within the java source files.
146+
147+
NOTE: The messages will depend on the model selected and tokens window size !
148+
149+
.Module Code
150+
image::07-module-code-executed.png[alt="Module code executed",align=left, width=95%]
151+
152+
NOTE: The module "web" is optional if the application to be migrated don't include, thymeleaf files, jsp and/or JavaScript assets
153+
154+
=== Step 5: Verification
155+
156+
After all modules complete, the agent runs the verification https://github.com/quarkusio/skills/blob/main/skills/migrate-spring-to-quarkus/SKILL.md#step-4-verify-the-migration[instructions].
157+
The checks we are doing allow to verify if the application has been migrated, that we have a Quarkus application and that the application can be launched using: `mvn quarkus:dev`.
158+
159+
.Verification checks
160+
image::09-verification-checks.png[alt="Verification checks",align=left, width=95%]
161+
162+
=== Step 6: Launch your Quarkus application
163+
164+
Your application is now a Quarkus project. Start it in dev mode:
165+
166+
[source,bash]
167+
----
168+
mvn compile quarkus:dev
169+
----
170+
171+
You should see the familiar Quarkus banner and your application running with live reload enabled:
172+
173+
[source]
174+
----
175+
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
176+
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
177+
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
178+
2026-06-03 11:30:03,129 INFO [io.quarkus] (Quarkus Main Thread) app 0.0.1-SNAPSHOT on JVM (powered by Quarkus 3.33.2) started in 9.058s. Listening on: http://localhost:8081
179+
180+
2026-06-03 11:30:03,130 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
181+
2026-06-03 11:30:03,131 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, compose, hibernate-orm, hibernate-orm-panache, jdbc-mysql, narayana-jta, qute, rest, rest-jackson, rest-qute, smallrye-context-propagation, vertx]
182+
----
183+
184+
== Conclusion
185+
186+
Skills turn your AI coding agent into a Java domain expert able to migrate Spring applications to Quarkus. Instead of relying on the general knowledge baked into a large language model (llm), using skills with reference files allows to give precise and curated instructions making the migration process straightforward even for more complex domains involving web parts.
187+
188+
For Spring-to-Quarkus migrations, this means every annotation swap, every dependency change, and every configuration mapping follows a verified playbook -- with gate checks ensuring the build stays green at every step.
189+
190+
The modular, domain-based design also means you are not locked into a one-size-fits-all approach. You can customize reference mappings, add project-specific modules, or even write entirely new Skills for other migration scenarios.
191+
192+
We encourage you to try it on your own Spring Boot projects and share your feedback with the community.
193+
194+
== Resources
195+
196+
- https://github.com/quarkusio/skills[Quarkus Skills repository] -- the collection of Skills maintained by the Quarkus project
197+
- https://agentskills.io/specification[Agent Skills specification] -- the open standard defining the Skills format
198+
- https://github.com/vercel-labs/skills[npx skills CLI] -- the CLI tool for discovering and installing Skills
199+
- https://claude.ai/download[Claude Code] -- the AI agent used in this walkthrough
63 KB
Loading
58.2 KB
Loading
32 KB
Loading
126 KB
Loading
6.95 KB
Loading
46.3 KB
Loading
99.1 KB
Loading
62.6 KB
Loading

0 commit comments

Comments
 (0)