From 8036c7c15aac7b477e282e694d0852a44078b4a6 Mon Sep 17 00:00:00 2001 From: extio-de Date: Sat, 27 Jun 2026 15:51:43 +0200 Subject: [PATCH] fix(StorageServiceImpl, StaticResourceServiceImpl): improve jar path handling for Windows and normalize path resolution --- .../resource/StaticResourceServiceImpl.java | 12 +++++++++--- .../game_engine/storage/StorageServiceImpl.java | 11 ++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/extio/game_engine/resource/StaticResourceServiceImpl.java b/src/main/java/de/extio/game_engine/resource/StaticResourceServiceImpl.java index dd0c817..d2470ad 100644 --- a/src/main/java/de/extio/game_engine/resource/StaticResourceServiceImpl.java +++ b/src/main/java/de/extio/game_engine/resource/StaticResourceServiceImpl.java @@ -28,14 +28,20 @@ public class StaticResourceServiceImpl implements StaticResourceService { if (location == null) { try { final URL url = StorageServiceImpl.class.getProtectionDomain().getCodeSource().getLocation(); + LOGGER.info("Code source location: {}", url); Path parent; if (url.toString().startsWith("jar:nested:")) { - parent = Paths.get(url.toString().substring("jar:nested:".length(), url.toString().indexOf("/!"))).getParent(); + if (Objects.requireNonNullElse(System.getProperty("os.name"), "").toLowerCase().contains("windows")) { + parent = Paths.get(url.toString().substring("jar:nested:/".length(), url.toString().indexOf("/!"))).getParent(); + } + else { + parent = Paths.get(url.toString().substring("jar:nested:".length(), url.toString().indexOf("/!"))).getParent(); + } } else { - parent = url.toURI().toPath().getParent(); + parent = Paths.get(url.toURI()).getParent(); } - final Path jarPath = parent != null ? parent.toAbsolutePath().normalize() : url.toURI().toPath().toAbsolutePath().normalize(); + final Path jarPath = parent != null ? parent.toAbsolutePath().normalize() : Paths.get(url.toURI()).toAbsolutePath().normalize(); final String currentSubDir = jarPath.getFileName().toString(); if ("bin".equals(currentSubDir) || "target".equals(currentSubDir)) { diff --git a/src/main/java/de/extio/game_engine/storage/StorageServiceImpl.java b/src/main/java/de/extio/game_engine/storage/StorageServiceImpl.java index e5d302e..5b87298 100644 --- a/src/main/java/de/extio/game_engine/storage/StorageServiceImpl.java +++ b/src/main/java/de/extio/game_engine/storage/StorageServiceImpl.java @@ -40,12 +40,17 @@ public class StorageServiceImpl implements StorageService { final URL url = StorageServiceImpl.class.getProtectionDomain().getCodeSource().getLocation(); Path parent; if (url.toString().startsWith("jar:nested:")) { - parent = Paths.get(url.toString().substring("jar:nested:".length(), url.toString().indexOf("/!"))).getParent(); + if (Objects.requireNonNullElse(System.getProperty("os.name"), "").toLowerCase().contains("windows")) { + parent = Paths.get(url.toString().substring("jar:nested:/".length(), url.toString().indexOf("/!"))).getParent(); + } + else { + parent = Paths.get(url.toString().substring("jar:nested:".length(), url.toString().indexOf("/!"))).getParent(); + } } else { - parent = url.toURI().toPath().getParent(); + parent = Paths.get(url.toURI()).getParent(); } - final Path jarPath = parent != null ? parent.toAbsolutePath().normalize() : url.toURI().toPath().toAbsolutePath().normalize(); + final Path jarPath = parent != null ? parent.toAbsolutePath().normalize() : Paths.get(url.toURI()).toAbsolutePath().normalize(); final String currentSubDir = jarPath.getFileName().toString(); if ("bin".equals(currentSubDir) || "target".equals(currentSubDir)) {