diff --git a/src/main/java/io/github/fvarrui/javapackager/packagers/CreateWindowsExeWhy.java b/src/main/java/io/github/fvarrui/javapackager/packagers/CreateWindowsExeWhy.java index 1382407d..66d93393 100644 --- a/src/main/java/io/github/fvarrui/javapackager/packagers/CreateWindowsExeWhy.java +++ b/src/main/java/io/github/fvarrui/javapackager/packagers/CreateWindowsExeWhy.java @@ -53,7 +53,7 @@ protected File doApply(WindowsPackager packager) throws Exception { FileUtils.copyFileToFile(iconFile, getGenericIcon()); // creates generic exe - FileUtils.copyResourceToFile("/windows/JavaLauncher.exe", getGenericExe()); + FileUtils.copyResourceToFile("/windows/JavaLauncher.exe", getGenericExe(), packager); // copies rcedit command line tool (needed to manipulate exe) File rcedit = new File(getOutputFolder(), "rcedit.exe"); diff --git a/src/main/java/io/github/fvarrui/javapackager/packagers/MacPackager.java b/src/main/java/io/github/fvarrui/javapackager/packagers/MacPackager.java index af10af82..8e6b2344 100644 --- a/src/main/java/io/github/fvarrui/javapackager/packagers/MacPackager.java +++ b/src/main/java/io/github/fvarrui/javapackager/packagers/MacPackager.java @@ -113,7 +113,7 @@ public File doCreateApp() throws Exception { // copies universalJavaApplicationStub startup file to boot java app File appStubFile = new File(macOSFolder, "universalJavaApplicationStub"); - FileUtils.copyResourceToFile("/mac/universalJavaApplicationStub", appStubFile, true); + FileUtils.copyResourceToFile("/mac/universalJavaApplicationStub", appStubFile, true, this); FileUtils.processFileContent(appStubFile, content -> { if (!macConfig.isRelocateJar()) { content = content.replaceAll("/Contents/Resources/Java", "/Contents/Resources"); diff --git a/src/main/java/io/github/fvarrui/javapackager/utils/FileUtils.java b/src/main/java/io/github/fvarrui/javapackager/utils/FileUtils.java index 3df42ff7..d50a1e0d 100644 --- a/src/main/java/io/github/fvarrui/javapackager/utils/FileUtils.java +++ b/src/main/java/io/github/fvarrui/javapackager/utils/FileUtils.java @@ -17,6 +17,7 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.Arrays; import java.util.List; @@ -24,6 +25,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import io.github.fvarrui.javapackager.packagers.Packager; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -191,9 +193,13 @@ private static void copyStreamToFile(InputStream is, File dest) throws Exception throw new Exception("Could not copy input stream to " + dest, ex); } } - - public static void copyResourceToFile(String resource, File dest, boolean unixStyleNewLines) throws Exception { - copyResourceToFile(resource, dest); + + public static void copyResourceToFile(String resource, File dest, boolean unixStyleNewLines) throws Exception { + copyResourceToFile(resource, dest, unixStyleNewLines, null); + } + + public static void copyResourceToFile(String resource, File dest, boolean unixStyleNewLines, Packager packager) throws Exception { + copyResourceToFile(resource, dest, packager); if (unixStyleNewLines) { try { processFileContent(dest, c -> c.replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n")); @@ -208,8 +214,22 @@ public static void processFileContent(File dest, Function functi content = function.apply(content); writeStringToFile(dest, content, StandardCharsets.UTF_8); } - - public static void copyResourceToFile(String resource, File dest) throws Exception { + + public static void copyResourceToFile(String resource, File dest) throws Exception { + copyResourceToFile(resource, dest, null); + } + + public static void copyResourceToFile(String resource, File dest, Packager packager) throws Exception { + if (packager != null) { + String rsc = resource.startsWith("/") ? resource.substring(1) : resource; + Path asset = packager.getAssetsDir().toPath().resolve(rsc); + if (Files.exists(asset)) { + Logger.info("Copying resource [" + asset + "] to file [" + dest + "]"); + copyFileToFile(asset.toFile(), dest); + return; + } + } + Logger.info("Copying resource [" + resource + "] to file [" + dest + "]"); copyStreamToFile(FileUtils.class.getResourceAsStream(resource), dest); }