diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md
index 8247faa8f5c9ca5d371e480091502071c3d83630..80c151a4b25ab1a6540944e5efa23b44f6e3ccc0 100644
--- a/docs/usage/self-hosted-configuration.md
+++ b/docs/usage/self-hosted-configuration.md
@@ -143,6 +143,7 @@ Supported tools for dynamic install are:
 
 - `composer`
 - `flux`
+- `gradle-wrapper`
 - `jb`
 - `npm`
 
diff --git a/lib/modules/manager/gradle-wrapper/artifacts.ts b/lib/modules/manager/gradle-wrapper/artifacts.ts
index 220edc5eb36a8b594d3bea60830bf2d3cbff111a..cc4c99f7100bea5562057ba56df05d6be2a54d11 100644
--- a/lib/modules/manager/gradle-wrapper/artifacts.ts
+++ b/lib/modules/manager/gradle-wrapper/artifacts.ts
@@ -13,7 +13,6 @@ import type { UpdateArtifact, UpdateArtifactsResult } from '../types';
 import {
   extraEnv,
   getJavaContraint,
-  getJavaVersioning,
   gradleWrapperFileName,
   prepareGradleCommand,
 } from './utils';
@@ -88,12 +87,16 @@ export async function updateArtifacts({
     logger.debug(`Updating gradle wrapper: "${cmd}"`);
     const execOptions: ExecOptions = {
       docker: {
-        image: 'java',
-        tagConstraint:
-          config.constraints?.java ?? getJavaContraint(config.currentValue!),
-        tagScheme: getJavaVersioning(),
+        image: 'sidecar',
       },
       extraEnv,
+      toolConstraints: [
+        {
+          toolName: 'java',
+          constraint:
+            config.constraints?.java ?? getJavaContraint(config.currentValue),
+        },
+      ],
     };
     try {
       await exec(cmd, execOptions);
diff --git a/lib/modules/manager/gradle-wrapper/util.spec.ts b/lib/modules/manager/gradle-wrapper/util.spec.ts
index 108d2dde6f71019498e46aebb720e2fa0995d576..384ca87531f14c2cc96b7c79520f12654238f8b0 100644
--- a/lib/modules/manager/gradle-wrapper/util.spec.ts
+++ b/lib/modules/manager/gradle-wrapper/util.spec.ts
@@ -3,8 +3,8 @@ import { extractGradleVersion, getJavaContraint } from './utils';
 
 describe('modules/manager/gradle-wrapper/util', () => {
   describe('getJavaContraint()', () => {
-    it('return null for global mode', () => {
-      expect(getJavaContraint('6')).toBeNull();
+    it('return ^8.0.0 for global mode', () => {
+      expect(getJavaContraint('4')).toBe('^8.0.0');
     });
 
     it('return ^11.0.0 for docker mode and undefined gradle', () => {
diff --git a/lib/modules/manager/gradle-wrapper/utils.ts b/lib/modules/manager/gradle-wrapper/utils.ts
index 8fb41e5753ff73afe625d03025c4d5f19677f016..ff3ff289369b641236e2daf93ee7c340770e1a49 100644
--- a/lib/modules/manager/gradle-wrapper/utils.ts
+++ b/lib/modules/manager/gradle-wrapper/utils.ts
@@ -4,7 +4,6 @@ import { logger } from '../../../logger';
 import { chmodLocalFile, statLocalFile } from '../../../util/fs';
 import { newlineRegex, regEx } from '../../../util/regex';
 import gradleVersioning from '../../versioning/gradle';
-import { id as npmVersioning } from '../../versioning/npm';
 import type { GradleVersionExtract } from './types';
 
 export const extraEnv = {
@@ -51,13 +50,10 @@ export async function prepareGradleCommand(
  * @param gradleVersion current gradle version
  * @returns A Java semver range
  */
-export function getJavaContraint(gradleVersion: string): string | null {
-  if (GlobalConfig.get('binarySource') !== 'docker') {
-    // ignore
-    return null;
-  }
-
-  const major = gradleVersioning.getMajor(gradleVersion);
+export function getJavaContraint(
+  gradleVersion: string | null | undefined
+): string | null {
+  const major = gradleVersion ? gradleVersioning.getMajor(gradleVersion) : null;
   if (major && major >= 7) {
     return '^16.0.0';
   }
@@ -68,10 +64,6 @@ export function getJavaContraint(gradleVersion: string): string | null {
   return '^11.0.0';
 }
 
-export function getJavaVersioning(): string {
-  return npmVersioning;
-}
-
 // https://regex101.com/r/IcOs7P/1
 const DISTRIBUTION_URL_REGEX = regEx(
   '^(?:distributionUrl\\s*=\\s*)(?<url>\\S*-(?<version>\\d+\\.\\d+(?:\\.\\d+)?(?:-\\w+)*)-(?<type>bin|all)\\.zip)\\s*$'
diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts
index 8a456a98ca28a29d8046704b101d8d6bf437607c..09c94432c48ced8344762fd4d0c3ce3382615862 100644
--- a/lib/util/exec/buildpack.ts
+++ b/lib/util/exec/buildpack.ts
@@ -53,6 +53,11 @@ const allToolConfig: Record<string, ToolConfig> = {
     depName: 'helm/helm',
     versioning: semverVersioningId,
   },
+  java: {
+    datasource: 'adoptium-java',
+    depName: 'java',
+    versioning: npmVersioningId,
+  },
   jb: {
     datasource: 'github-releases',
     depName: 'jsonnet-bundler/jsonnet-bundler',