Java Upgrade Guide 2026: Plan Your Move to Java 25 LTS

June 11, 2026
Paavo Pauklin

Last updated: June 2026

Java upgrades rarely feel urgent until a partner SDK, security patch, framework change, or cloud integration forces the issue.

For many companies, the question is not “Should we upgrade Java?” The better question is: how do we move without turning a routine platform upgrade into a risky rescue project?

This guide gives leaders and technical decision-makers a practical view of where Java stands today, which versions are safe targets, and how to plan an upgrade that supports future development, AI adoption, cloud services, and long-term maintainability.

This article now reflects the Java landscape in June 2026, including Java 25 LTS, Java 26 as a non-LTS release, Spring Boot 4 requirements, AWS SDK for Java v1 end-of-support, and current AI SDK guidance.

Why this matters now

Java now follows a predictable six-month release cadence. Some releases are short-term releases. Others are long-term support releases, usually called LTS versions.

In enterprise environments, teams usually standardise around LTS versions because that is where the wider ecosystem becomes more predictable: security updates, cloud SDKs, frameworks, build tools, application servers, monitoring agents, container images, and developer hiring all tend to align around current LTS baselines.

Staying behind can look cheaper in the short term. But the cost usually appears later, when:

  • a cloud SDK drops support for an older runtime,
  • a security update requires a framework upgrade,
  • a partner integration expects newer TLS or HTTP behaviour,
  • developers spend time pinning old dependencies,
  • hiring becomes harder because the stack feels outdated,
  • AI or cloud work gets blocked by platform limitations.

The goal is not to chase every Java release. The goal is to build a calm upgrade habit so Java never becomes the thing that blocks the roadmap.

The leadership checklist before any Java upgrade

Before approving a Java upgrade, ask for a short, practical inventory. It does not need to be a 40-page report. One good page is often enough.

Cover these points:

  1. Current runtime
    Which Java version are we running in development, test, staging, and production?
  2. Vendor and support window
    Which Java distribution are we using: Oracle JDK, Eclipse Temurin, Amazon Corretto, Azul, Red Hat, Microsoft Build of OpenJDK, or something else? What support window applies to our actual vendor?
  3. Framework fit
    Which versions of Spring Boot, Spring Framework, Quarkus, Micronaut, Jakarta EE, application servers, or other core frameworks are we using?
  4. Dependency risk
    Are build tools, plugins, APM agents, security scanners, cloud SDKs, database drivers, and partner SDKs compatible with the target Java version?
  5. Test confidence
    Do we have business-level automated tests, integration tests, and a staging environment that gives realistic feedback?
  6. Deployment plan
    Can we release in stages, observe the impact, and roll forward quickly if needed?
  7. Data migration risk
    Are database or schema changes part of the upgrade? If yes, can old and new code run safely during the transition?

If any of these answers are unclear, fix the uncertainty before starting the upgrade. Most Java upgrade pain comes from unknowns, not from Java itself.

Pick your target with confidence

For most organisations in 2026, the practical target is one of these:

  • Java 25 if you want the strongest long-term baseline.
  • Java 21 if you need a stable stepping stone with broad ecosystem support.
  • Java 17 only if it is required by your current framework path or as an intermediate step.
  • Java 11 or older only if you are managing legacy constraints and already have a modernisation plan.

Do not move to a newer Java version just because it exists. Move because it reduces risk, improves maintainability, and keeps the platform aligned with the tools your teams and partners need.

The best upgrade path is usually discovered through a short sandbox exercise:

  1. Build the application on the target Java version.
  2. Run the test suite.
  3. Check framework and dependency compatibility.
  4. Run smoke tests in a production-like environment.
  5. Identify the real blockers.
  6. Decide whether the JVM or the framework should move first.

Sometimes the Java runtime can be upgraded first. Sometimes the framework needs to move first. Sometimes the safest path is Java 11 → Java 17 → Java 21/25. The right answer depends on the actual application, not on a generic version chart.

Java today: where you stand by version

Why we skip historical releases like Java 9, 10, 12, and 13

Since Java adopted a six-month cadence, short-term releases have been quickly replaced by newer versions. They can be useful for testing and early adoption, but they are rarely the right standard for business-critical systems.

Enterprise teams usually standardise on LTS versions because they provide a better support runway and stronger ecosystem alignment.

That is why this guide focuses on Java 25, 21, 17, 11, and 8 or older.

Java 26 - current non-LTS release

Java 26 is available, but it is not an LTS release.

This means it can be useful for:

  • testing future compatibility,
  • preparing libraries and internal platforms,
  • checking whether build tools and containers are ready,
  • giving engineering teams early exposure to upcoming changes.

But for most business-critical systems, Java 26 should not replace Java 25 as the default upgrade target.

Why it matters: Java 26 is useful for preparation, not as the standard enterprise destination. If your goal is long-term stability, Java 25 LTS is the stronger default.

Java 25 LTS - best long-term target for new upgrades

Java 25 is the strongest current LTS target for new services and planned modernisation work.

It gives teams the longest current LTS runway and places the platform where the ecosystem is heading. Over time, more cloud tools, SDKs, frameworks, observability agents, examples, and container images will optimise around Java 25 and newer releases.

Java 25 is especially attractive when:

  • you are starting a new service,
  • you are already upgrading frameworks,
  • you are modernising cloud infrastructure,
  • you are building new AI-enabled services,
  • you want to avoid another Java upgrade soon.

However, Java 25 should not be treated as a blind jump. Some applications may have dependencies, frameworks, application servers, or vendor products that are not fully ready. In those cases, Java 21 may be a safer first step.

Why it matters: Java 25 gives the best long-term runway, but a successful upgrade still depends on framework and dependency readiness.

Java 21 LTS - strong production baseline and practical stepping stone

Java 21 remains a very strong production baseline.

For many organisations, Java 21 is the most practical near-term target because it is mature, widely supported, and already well understood across modern Java frameworks and tooling.

Java 21 also introduced virtual threads, which can help I/O-heavy services scale with less thread overhead. Not every application needs virtual threads, and they should not be the only reason to upgrade, but they are useful for many API, integration, and streaming workloads.

Java 21 is a good choice when:

  • Java 25 is not yet fully supported by a key dependency,
  • the team wants a lower-risk upgrade step,
  • the application is moving from Java 8 or 11,
  • the company wants a modern baseline without being at the newest LTS immediately.

Risk if you pause here too long: Java 21 is healthy today, but it should not stop long-term planning. If you choose Java 21 now, keep Java 25 in the roadmap.

Java 17 LTS - still valid, but no longer a comfortable destination

Java 17 is still widely used and still valid for many production systems. It is also the minimum requirement for many modern Java frameworks.

But the nuance matters: Java 17 is increasingly a minimum floor, not the best strategic target.

Spring Boot 3 already moved the Java ecosystem strongly toward Java 17. Spring Boot 4 continues that direction by requiring Java 17 or newer. This means teams on Java 8 or Java 11 cannot treat a Spring Boot 4 move as only a framework upgrade. It also requires a Java runtime upgrade.

At the same time, Java 17 is no longer new. Organisations using Oracle JDK need to pay close attention to vendor support timelines, because Oracle Premier Support for Java 17 ends in September 2026. Other vendors may have different support models, so the key is to check the support policy for the distribution you actually use.

Java 17 can still be acceptable when:

  • you need it as a stepping stone from Java 8 or 11,
  • your current framework path is tied to Java 17,
  • your application has dependencies that are not ready for Java 21 or 25,
  • the upgrade must be split into smaller, lower-risk phases.

But for new modernisation work, Java 21 or Java 25 is usually the better target.

Why it matters: Java 17 is not “bad,” but it is no longer where long-term planning should stop. Treat it as a bridge unless there is a clear reason to stay.

Java 11 LTS - legacy baseline with rising friction

Java 11 is still present in many companies, but it is now a legacy baseline for active development.

Some vendors and libraries still support it. Some cloud SDKs still run on it. But modern Java work has moved on. Frameworks, plugins, testing tools, application servers, security defaults, container base images, and examples increasingly assume Java 17 or newer.

Holding Java 11 often means:

  • staying on older Spring Boot or framework lines,
  • pinning older dependency versions,
  • accepting slower security and compatibility work,
  • spending more effort on build and deployment fixes,
  • making future upgrades larger and riskier.

Java 11 can remain acceptable for stable legacy systems that receive limited change. But it should not be the foundation for new AI, cloud, or customer-facing platform work.

Why it matters: Java 11 may still run, but the ecosystem is moving away from it. The longer you wait, the more expensive the eventual upgrade becomes.

Java 8 and older - high-risk for most active systems

Java 8 was an excellent release and still exists in many enterprise environments. But in 2026, Java 8 and older versions should be treated as high-risk for most active systems.

The nuance is important: some vendors and cloud libraries still provide support for Java 8 in specific cases. That does not mean Java 8 is a good foundation for new development.

Teams staying on Java 8 usually face:

  • older TLS and security assumptions,
  • harder HTTP/2 and gRPC adoption,
  • weaker container image baselines,
  • limited framework upgrade options,
  • more dependency pinning,
  • fewer current examples and tutorials,
  • more difficult hiring and onboarding,
  • rising audit and compliance questions.

If a Java 8 system is stable, isolated, and rarely changed, it may not need an emergency rewrite. But if the system is business-critical, customer-facing, connected to cloud services, or expected to support AI features, a platform upgrade should be planned before major new development.

Why it matters: Java 8 can still exist in controlled legacy environments, but building new strategic work on it creates avoidable risk.

What leaders should expect from a good Java upgrade

A good Java upgrade should not feel like a heroic technical rescue. It should feel like controlled platform hygiene.

The expected outcomes are:

  1. Lower security risk
    Newer runtimes and supported frameworks reduce exposure to old dependencies and unsupported components.
  2. Faster delivery
    Teams spend less time fighting outdated plugins, SDKs, and build pipelines.
  3. Better cloud and AI readiness
    Modern Java versions work better with current SDKs, containers, streaming patterns, observability tools, and deployment models.
  4. Stronger hiring story
    Developers are more willing to work on a platform that feels maintained and current.
  5. More predictable cost
    Regular upgrades are cheaper than emergency upgrades triggered by a vendor, partner, or audit deadline.

Can our Java version use modern AI services?

When teams say “we cannot plug in AI,” the problem is often not the AI provider. It is usually the surrounding platform: Java version, framework version, SDK support, TLS, HTTP/2, gRPC, streaming, observability, network controls, and deployment architecture.

The important distinction is this:

“The SDK technically runs” is not the same as “the platform is ready for production AI.”

Many AI SDKs still support older Java versions. But production AI workloads often need more than a working client library. They need reliable streaming, secure authentication, current HTTP clients, good timeout handling, retries, rate limits, cost tracking, logging, and monitoring.

What the major Java SDKs expect now

OpenAI official Java SDK

The official OpenAI Java SDK is the main source of truth for OpenAI API development in Java. For teams building new OpenAI integrations, this should be checked directly because AI APIs and SDKs change quickly.

Azure OpenAI for Java

Azure OpenAI has had its own Java client library, but Microsoft’s Azure SDK repository now notes that the current Azure OpenAI Java client will not receive updates in its current form. For newer OpenAI features, Microsoft points developers toward the official OpenAI Java library, with Azure-specific migration guidance where needed.

This does not mean every existing Azure OpenAI Java integration must be rewritten immediately. But it does mean teams should check their client choice before building new long-term AI functionality.

AWS Bedrock and SageMaker

For AWS AI services, teams should prefer AWS SDK for Java v2 for new work.

AWS SDK for Java v1 reached end-of-support on December 31, 2025. That changes the wording from “plan before it ends” to “treat migration as active technical debt.”

Existing applications using SDK v1 may continue to function, but they should not be the foundation for new strategic development.

Google Cloud and Vertex AI

Google Cloud Java libraries are tested against several Java versions, including Java 8, 11, 17, 21, and 25. Google also recommends Java 25 as the best choice for new development.

This is a useful nuance. Older Java versions may still be supported, but new development should not automatically choose the oldest supported runtime. Support is not the same as strategic fit.

What this means by Java runtime

Java 25 - Green

Best target for new AI-enabled services and platform modernisation. It gives the strongest current LTS runway and aligns well with where cloud libraries and examples are moving.

Java 21 - Green

Still a very strong baseline. For many teams, Java 21 is the best practical step before Java 25, especially when upgrading from Java 8 or 11.

Java 17 - Amber-green

Java 17 can still support modern AI work, especially when the framework stack requires it. But it should be treated as an intermediate or minimum baseline, not the preferred long-term destination.

Java 11 - Amber

AI integration may still be possible, but expect more friction around frameworks, examples, plugins, containers, and security defaults. Java 11 should normally trigger a platform upgrade plan before serious AI expansion.

Java 8 and older - Red for new AI work

Some SDKs and libraries may still support Java 8, but the operational tax is high. For serious AI work, upgrade the platform first.

Quick AI-readiness checklist for Java services

Before building production AI features into a Java application, check:

  1. Runtime
    Are we on Java 21 or 25? If not, do we at least have a clear path away from Java 8 or 11?
  2. Framework
    Does our Spring Boot, Quarkus, Micronaut, Jakarta EE, or application server version support the target Java version?
  3. SDK choice
    Are we using current SDKs, or are we building new features on clients that are already in maintenance or end-of-support?
  4. Streaming
    Do SSE, WebSocket, HTTP/2, or gRPC flows work through our load balancers, ingress, proxies, and security layers?
  5. Security
    Are TLS settings, CA bundles, secrets handling, and authentication patterns current?
  6. Observability
    Can we monitor latency, token usage, cost, provider errors, retries, and timeouts?
  7. Guardrails
    Do we have rate limits, policy checks, logging, and API boundaries? AI providers should not be called directly from browsers or uncontrolled clients.
  8. Rollback and cost control
    Can we disable, throttle, or reroute AI features if cost, latency, or quality becomes a problem?

Framework and tooling considerations

Java upgrades rarely happen in isolation. The Java runtime is only one part of the platform.

A realistic upgrade plan should check:

  • Spring Boot or other framework versions,
  • Spring Framework requirements,
  • Maven or Gradle versions,
  • build plugins,
  • testing frameworks,
  • APM and monitoring agents,
  • database drivers,
  • application servers,
  • container base images,
  • CI/CD runners,
  • cloud SDKs,
  • security scanning tools.

Spring Boot is a good example of why this matters. Spring Boot 4 requires Java 17 or newer and supports Java versions up to Java 26. This makes Java 17 the minimum requirement, but not necessarily the best target. If a team is already doing meaningful modernisation work, it should consider whether Java 21 or Java 25 is the better endpoint.

The worst approach is to upgrade Java, framework, dependencies, containers, and deployment pipelines all at once without staging. The better approach is to identify which layer creates the real constraint and move in controlled steps.

Ship without drama

The safest Java upgrades are boring.

Start with a pilot. Pick one service that is representative but not the most business-critical. Upgrade it in a branch. Run the tests. Build the container. Deploy to a staging environment. Measure startup time, memory, latency, errors, logs, and integration behaviour.

Then decide the rollout pattern:

  • one service at a time,
  • one application group at a time,
  • one environment at a time,
  • or one framework family at a time.

Avoid “big bang” upgrades unless the estate is small and well tested.

When database changes are involved, plan carefully. Old and new code may need to run side by side for a period. In those cases, rollback is not always as simple as redeploying the old application. Sometimes the safer plan is to roll forward with a patch.

A good upgrade plan defines:

  • what gets tested,
  • who approves promotion,
  • which metrics matter,
  • what failure looks like,
  • how to roll back or roll forward,
  • when the upgrade is considered complete.

FAQ for decision-makers

Can we skip Java versions?

Often, yes. You do not usually need to move one Java version at a time.

But skipping versions is only safe if your frameworks, SDKs, build tools, and deployment pipeline support the target version. Ask for a short compatibility check before committing.

Should we move directly to Java 25?

For new services, usually yes.

For existing systems, it depends on framework and dependency readiness. Java 25 is the best long-term LTS target, but Java 21 may be the safer first step for complex systems moving from Java 8 or 11.

Should we use Java 26?

Usually not as the production standard.

Java 26 is useful for testing and preparation, but it is not an LTS release. For most enterprise systems, Java 25 is the better long-term target.

Is Java 17 still safe?

Java 17 can still be safe and valid, especially in systems already running modern frameworks. But it should not be seen as the ideal destination for new platform work.

Think of Java 17 as a minimum modern floor or an intermediate step. For longer-term planning, look at Java 21 or Java 25.

Do we need virtual threads?

Not always.

Virtual threads can help I/O-heavy services, especially APIs, gateways, streaming services, and integration-heavy workloads. But they should be measured. Do not upgrade only because a feature sounds attractive. Upgrade because the platform case is strong.

How do we avoid downtime?

Use staged releases, health checks, monitoring, and a deployment plan that allows you to stop or reverse the rollout if needed.

For changes involving data, design the migration so old and new application versions can run safely during the transition.

What should we do if we are still on Java 8 or 11?

Do not panic, but do not ignore it.

Start with an inventory. Identify the main blockers. Check framework versions, vendor support, SDKs, and deployment constraints. Then choose a realistic target: often Java 17 or 21 as a first step, with Java 25 as the longer-term destination.

Leader’s rule of thumb

If you are on Java 25, you are on the strongest current LTS baseline.

If you are on Java 21, you are still in a good position, but you should keep Java 25 in the roadmap.

If you are on Java 17, you are on a valid but shrinking baseline. Treat it as a minimum floor or stepping stone, not the preferred end-state for new modernisation work.

If you are on Java 11, expect rising friction and start planning the move.

If you are on Java 8 or older, avoid building serious new AI, cloud, or partner integration work on top of it. Upgrade the platform first.

What to do next

Ask your team for a one-page Java inventory:

  • current Java version by application,
  • Java vendor and support window,
  • main framework version,
  • build tool version,
  • key dependencies and SDKs,
  • known blockers,
  • recommended target version,
  • estimated upgrade path,
  • test confidence,
  • rollout plan.

Then approve a short sandbox exercise. The goal is not to upgrade everything immediately. The goal is to replace assumptions with facts.

Once the path is clear, schedule the upgrade in small, measurable steps. Keep the habit quarterly so Java upgrades never become a crisis.

Talk to us

We help companies plan and deliver Java upgrades with calm, measurable steps.

If you want a second pair of eyes on your Java estate, or a development team to carry out the upgrade, get in touch.

Team extension

Most suitable if you need developers who focus 100% on their assignments and need extra development resources for a longer period (6+ months).

Learn more

Software projects

You have a business idea that can make you successful but you need expert software engineers to build that solution.

Learn more

Software Development Services

Meet the authors

Paavo Pauklin
Executive Board Member
+372 6 555 022
Joseph Carson
Ethical Hacker, Cybersecurity Advisor
+372 6 555 022

Sign up to get the 30 min free consultation

Get free consulation