From 09e12ac2fb19a21109e20ac731ed36b9823a238f Mon Sep 17 00:00:00 2001 From: Kiril Keranov <114745615+kiril-keranov@users.noreply.github.com> Date: Mon, 16 Mar 2026 11:38:24 +0200 Subject: [PATCH 1/3] Add jreName parameter to WriteJavaHomeProfileD function --- src/java/jres/jre.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/java/jres/jre.go b/src/java/jres/jre.go index 5cd252a14..829384889 100644 --- a/src/java/jres/jre.go +++ b/src/java/jres/jre.go @@ -376,7 +376,7 @@ func WriteJavaOptsWithPriority(ctx *common.Context, priority int, name string, o // 3. Prepends $JAVA_HOME/bin to PATH // // It also sets these environment variables during staging for use by frameworks. -func WriteJavaHomeProfileD(ctx *common.Context, jreDir, javaHome string) error { +func WriteJavaHomeProfileD(ctx *common.Context, jreDir, javaHome, jreName string) error { // Compute relative path from jreDir to javaHome relPath, err := filepath.Rel(jreDir, javaHome) if err != nil { @@ -396,12 +396,34 @@ func WriteJavaHomeProfileD(ctx *common.Context, jreDir, javaHome string) error { javaHomePath = fmt.Sprintf("$DEPS_DIR/%s/jre/%s", depsIdx, relPath) } + var jreFolder string + switch jreName { + case "OpenJDK": + jreFolder = "open_jdk_jre" + case "SapMachine": + jreFolder = "sap_machine_jre" + case "Oracle JRE": + jreFolder = "oracle_jre" + case "Zing JRE": + jreFolder = "zing_jre" + case "Zulu": + jreFolder = "zulu_jre" + case "GraalVM": + jreFolder = "graal_vm_jre" + case "IBM JRE": + jreFolder = "ibm_jre" + default: + jreFolder = "open_jdk_jre" + } + // Create the profile.d script content with JAVA_HOME, JRE_HOME, and PATH // Following the pattern from reference buildpacks (Ruby, Python, Go) envContent := fmt.Sprintf(`export JAVA_HOME=%s export JRE_HOME=%s export PATH=$JAVA_HOME/bin:$PATH -`, javaHomePath, javaHomePath) +mkdir -p /home/vcap/app/.java-buildpack +ln -sf $JAVA_HOME /home/vcap/app/.java-buildpack/%s +`, javaHomePath, javaHomePath, jreFolder) // Write the profile.d script using libbuildpack API if err := ctx.Stager.WriteProfileD("java.sh", envContent); err != nil { From 0fb31043ce8b69dd11989765c8941e77d112f857 Mon Sep 17 00:00:00 2001 From: Kiril Keranov Date: Mon, 16 Mar 2026 11:44:31 +0200 Subject: [PATCH 2/3] Add jreName when writing profiled --- src/java/jres/graalvm.go | 2 +- src/java/jres/ibm.go | 2 +- src/java/jres/openjdk.go | 2 +- src/java/jres/oracle.go | 2 +- src/java/jres/sapmachine.go | 2 +- src/java/jres/zulu.go | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/java/jres/graalvm.go b/src/java/jres/graalvm.go index c4155b0a3..f693ff352 100644 --- a/src/java/jres/graalvm.go +++ b/src/java/jres/graalvm.go @@ -215,5 +215,5 @@ func (g *GraalVMJRE) findJavaHome() (string, error) { // writeProfileDScript creates a profile.d script that exports JAVA_HOME, JRE_HOME, and PATH at runtime // Delegates to the shared helper function in jre.go func (g *GraalVMJRE) writeProfileDScript() error { - return WriteJavaHomeProfileD(g.ctx, g.jreDir, g.javaHome) + return WriteJavaHomeProfileD(g.ctx, g.jreDir, g.javaHome, g.Name()) } diff --git a/src/java/jres/ibm.go b/src/java/jres/ibm.go index 2f75e1bba..feeb005e1 100644 --- a/src/java/jres/ibm.go +++ b/src/java/jres/ibm.go @@ -219,5 +219,5 @@ func (i *IBMJRE) findJavaHome() (string, error) { // writeProfileDScript creates the profile.d script for setting JAVA_HOME, JRE_HOME, and PATH at runtime func (i *IBMJRE) writeProfileDScript() error { - return WriteJavaHomeProfileD(i.ctx, i.jreDir, i.javaHome) + return WriteJavaHomeProfileD(i.ctx, i.jreDir, i.javaHome, i.Name()) } diff --git a/src/java/jres/openjdk.go b/src/java/jres/openjdk.go index 51894cb89..db85cc061 100644 --- a/src/java/jres/openjdk.go +++ b/src/java/jres/openjdk.go @@ -250,5 +250,5 @@ func (o *OpenJDKJRE) findJavaHome() (string, error) { // writeProfileDScript creates a profile.d script that exports JAVA_HOME, JRE_HOME, and PATH at runtime // Delegates to the shared helper function in jre.go func (o *OpenJDKJRE) writeProfileDScript() error { - return WriteJavaHomeProfileD(o.ctx, o.jreDir, o.javaHome) + return WriteJavaHomeProfileD(o.ctx, o.jreDir, o.javaHome, o.Name()) } diff --git a/src/java/jres/oracle.go b/src/java/jres/oracle.go index 78519921d..9af03bea9 100644 --- a/src/java/jres/oracle.go +++ b/src/java/jres/oracle.go @@ -208,5 +208,5 @@ func (o *OracleJRE) findJavaHome() (string, error) { // writeProfileDScript creates the profile.d script for setting JAVA_HOME, JRE_HOME, and PATH at runtime func (o *OracleJRE) writeProfileDScript() error { - return WriteJavaHomeProfileD(o.ctx, o.jreDir, o.javaHome) + return WriteJavaHomeProfileD(o.ctx, o.jreDir, o.javaHome, o.Name()) } diff --git a/src/java/jres/sapmachine.go b/src/java/jres/sapmachine.go index 8c747f186..6a52c072f 100644 --- a/src/java/jres/sapmachine.go +++ b/src/java/jres/sapmachine.go @@ -215,5 +215,5 @@ func (s *SapMachineJRE) findJavaHome() (string, error) { // writeProfileDScript creates a profile.d script that exports JAVA_HOME, JRE_HOME, and PATH at runtime // Delegates to the shared helper function in jre.go func (s *SapMachineJRE) writeProfileDScript() error { - return WriteJavaHomeProfileD(s.ctx, s.jreDir, s.javaHome) + return WriteJavaHomeProfileD(s.ctx, s.jreDir, s.javaHome, s.Name()) } diff --git a/src/java/jres/zulu.go b/src/java/jres/zulu.go index 2fa0ff5a9..c8d57ebb8 100644 --- a/src/java/jres/zulu.go +++ b/src/java/jres/zulu.go @@ -215,5 +215,5 @@ func (z *ZuluJRE) findJavaHome() (string, error) { // writeProfileDScript creates a profile.d script that exports JAVA_HOME, JRE_HOME, and PATH at runtime // Delegates to the shared helper function in jre.go func (z *ZuluJRE) writeProfileDScript() error { - return WriteJavaHomeProfileD(z.ctx, z.jreDir, z.javaHome) + return WriteJavaHomeProfileD(z.ctx, z.jreDir, z.javaHome, z.Name()) } From b7b32452da70a0ef6aa25ab1d9de7ea6388528fd Mon Sep 17 00:00:00 2001 From: Kiril Keranov Date: Mon, 16 Mar 2026 13:30:36 +0200 Subject: [PATCH 3/3] Add comments --- src/java/jres/jre.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/java/jres/jre.go b/src/java/jres/jre.go index 829384889..8f43545cb 100644 --- a/src/java/jres/jre.go +++ b/src/java/jres/jre.go @@ -374,6 +374,7 @@ func WriteJavaOptsWithPriority(ctx *common.Context, priority int, name string, o // 1. Exports JAVA_HOME using $DEPS_DIR runtime variable // 2. Exports JRE_HOME (same as JAVA_HOME) // 3. Prepends $JAVA_HOME/bin to PATH +// 4. Create symlink with old ruby based jre path to JAVA_HOME. See https://github.com/cloudfoundry/java-buildpack/issues/1151 // // It also sets these environment variables during staging for use by frameworks. func WriteJavaHomeProfileD(ctx *common.Context, jreDir, javaHome, jreName string) error { @@ -418,6 +419,10 @@ func WriteJavaHomeProfileD(ctx *common.Context, jreDir, javaHome, jreName string // Create the profile.d script content with JAVA_HOME, JRE_HOME, and PATH // Following the pattern from reference buildpacks (Ruby, Python, Go) + // Symlink to JAVA_HOME is added following the old ruby based buidpack jre path due to possible compatibility issues + // because ruby based bp apps relied on hardcoded paths to jre home. Thus providing the same path giving them possibility + // to migrate without breaking them when migrating to the go-based version. + // For more info check https://github.com/cloudfoundry/java-buildpack/issues/1151 envContent := fmt.Sprintf(`export JAVA_HOME=%s export JRE_HOME=%s export PATH=$JAVA_HOME/bin:$PATH