This is an automated email from the ASF dual-hosted git repository.

geertjanw pushed a commit to branch issue-133-windows-open-with
in repository https://gitbox.apache.org/repos/asf/netbeans-nbpackage.git

commit 7fde0e0f89c78a8081509d6f93b95766cd7dc6aa
Author: Geertjan Wielenga <[email protected]>
AuthorDate: Thu Oct 1 14:58:32 2026 +0200

    Set bundled JDK home in netbeans.conf via ${BASEDIR} (#133)
    
    The Windows installer set the bundled JDK via --jdkhome on the Start
    Menu shortcut, so launching the executable directly - eg. via
    "Open With..." on a file - did not find the bundled JDK and either fell
    back to a system JDK or failed to launch.
    
    Write the bundled JDK location into netbeans.conf relative to the
    installation using the launcher's ${BASEDIR} token (now supported by the
    IDE and platform launchers), setting both jdkhome and netbeans_jdkhome.
    This resolves however the application is launched. The shortcut
    --jdkhome parameter is kept so packaging of older launchers that lack
    ${BASEDIR} support is unaffected.
    
    This applies to all packagers that bundle the runtime inside the
    application directory; the previous plain relative path was replaced.
---
 README.md                                                   |  5 +++--
 .../org/apache/netbeans/nbpackage/AbstractPackagerTask.java | 13 ++++++++++---
 src/test/java/org/apache/netbeans/nbpackage/TestUtils.java  |  4 +++-
 .../netbeans/nbpackage/innosetup/InnoSetupPackagerTest.java |  5 +++++
 4 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 3c86353..bb7a6a5 100644
--- a/README.md
+++ b/README.md
@@ -97,8 +97,9 @@ wine C:\\Program\ Files\ \(x86\)\\Inno\ Setup\ 6\\ISCC.exe $1
 ### `--type zip`
 
 Mainly for debugging purposes, although can be used to bundle an RCP 
application
-with local runtime. As the IDE launcher does not yet support relative JDK 
location,
-this is less useful there.
+with local runtime. When a runtime is bundled, the JDK location is written into
+`netbeans.conf` relative to the installation using the launcher's `${BASEDIR}`
+token, so it is found however the application is launched.
 
 ## Building from source
 
diff --git 
a/src/main/java/org/apache/netbeans/nbpackage/AbstractPackagerTask.java 
b/src/main/java/org/apache/netbeans/nbpackage/AbstractPackagerTask.java
index d8e65c1..d94cd81 100644
--- a/src/main/java/org/apache/netbeans/nbpackage/AbstractPackagerTask.java
+++ b/src/main/java/org/apache/netbeans/nbpackage/AbstractPackagerTask.java
@@ -360,9 +360,16 @@ public abstract class AbstractPackagerTask implements 
Packager.Task {
 
     private void addRuntimeToConf(Path conf, String jdkhome) throws 
IOException {
         var contents = Files.readString(conf);
-        contents = contents.replace("#jdkhome=\"/path/to/jdk\"", "jdkhome=\"" 
+ jdkhome + "\"");
-        // @TODO - fix this when relative links work with IDE launcher
-        // contents = contents.replace("#netbeans_jdkhome=\"/path/to/jdk\"", 
"netbeans_jdkhome=\"" + jdkhome + "\"");
+        // Point at the bundled JDK relative to the installation using the
+        // launcher's ${BASEDIR} token. Unlike passing --jdkhome via a 
shortcut,
+        // this resolves however the application is launched - eg. directly or
+        // via "Open With..." on a file. Forward slashes are tolerated on all
+        // platforms including Windows.
+        String basedirHome = "${BASEDIR}/" + jdkhome.replace('\\', '/');
+        contents = contents.replace("#jdkhome=\"/path/to/jdk\"",
+                "jdkhome=\"" + basedirHome + "\"");
+        contents = contents.replace("#netbeans_jdkhome=\"/path/to/jdk\"",
+                "netbeans_jdkhome=\"" + basedirHome + "\"");
         Files.writeString(conf, contents);
     }
 
diff --git a/src/test/java/org/apache/netbeans/nbpackage/TestUtils.java 
b/src/test/java/org/apache/netbeans/nbpackage/TestUtils.java
index 21fc4e1..53ff41e 100644
--- a/src/test/java/org/apache/netbeans/nbpackage/TestUtils.java
+++ b/src/test/java/org/apache/netbeans/nbpackage/TestUtils.java
@@ -49,7 +49,9 @@ public class TestUtils {
         Files.createFile(appBin.resolve(branding));
         Files.createFile(appBin.resolve(branding + ".exe"));
         Files.createFile(appBin.resolve(branding + "64.exe"));
-        Files.createFile(appEtc.resolve(branding + ".conf"));
+        Files.writeString(appEtc.resolve(branding + ".conf"),
+                "#jdkhome=\"/path/to/jdk\"\n"
+                + "#netbeans_jdkhome=\"/path/to/jdk\"\n");
         Files.createFile(platform.resolve("module"));
         return dir;
     }
diff --git 
a/src/test/java/org/apache/netbeans/nbpackage/innosetup/InnoSetupPackagerTest.java
 
b/src/test/java/org/apache/netbeans/nbpackage/innosetup/InnoSetupPackagerTest.java
index 9622a4e..4238f49 100644
--- 
a/src/test/java/org/apache/netbeans/nbpackage/innosetup/InnoSetupPackagerTest.java
+++ 
b/src/test/java/org/apache/netbeans/nbpackage/innosetup/InnoSetupPackagerTest.java
@@ -74,6 +74,11 @@ public class InnoSetupPackagerTest {
         assertTrue(Files.exists(resolve(image, "app", "bin", "app64.exe")));
         assertTrue(Files.exists(resolve(image, "app", "etc", "app.ico")));
         assertTrue(Files.exists(resolve(image, "app", "jdk", "bin", 
"java.exe")));
+        // bundled JDK is referenced in netbeans.conf relative to ${BASEDIR}, 
so
+        // it is found however the launcher is started (not just via a 
shortcut)
+        String conf = Files.readString(resolve(image, "app", "etc", 
"app.conf"));
+        assertTrue(conf.contains("jdkhome=\"${BASEDIR}/jdk\""));
+        assertTrue(conf.contains("netbeans_jdkhome=\"${BASEDIR}/jdk\""));
     }
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to