From fbd0d663addffa5d29e3a19e902d89d52b62fe19 Mon Sep 17 00:00:00 2001 From: Nikollai Date: Tue, 26 May 2026 17:42:56 +0200 Subject: [PATCH 1/2] Added fat JAR compilation --- pom.xml | 20 ++++++++++++++++++++ src/main/java/Main.java | 1 - src/main/java/millions/Main.java | 7 +++++++ 3 files changed, 27 insertions(+), 1 deletion(-) delete mode 100644 src/main/java/Main.java create mode 100644 src/main/java/millions/Main.java diff --git a/pom.xml b/pom.xml index 3a9450d..3a6900c 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,26 @@ + + org.apache.maven.plugins + maven-shade-plugin + 3.6.2 + + + package + + shade + + + + + millions.Main + + + + + + org.apache.maven.plugins maven-compiler-plugin diff --git a/src/main/java/Main.java b/src/main/java/Main.java deleted file mode 100644 index 6029b2a..0000000 --- a/src/main/java/Main.java +++ /dev/null @@ -1 +0,0 @@ -public class Main {} diff --git a/src/main/java/millions/Main.java b/src/main/java/millions/Main.java new file mode 100644 index 0000000..a55fa38 --- /dev/null +++ b/src/main/java/millions/Main.java @@ -0,0 +1,7 @@ +package millions; + +public class Main { + public static void main(String[] args) { + App.main(args); + } +} From a61978a7bb06987ad66b7f088941b6f639bb33e1 Mon Sep 17 00:00:00 2001 From: Nikollai Date: Tue, 26 May 2026 18:13:00 +0200 Subject: [PATCH 2/2] Added a resource conversion to read internal files when deployed as a jar file --- .../millions/controller/GameController.java | 8 ++++---- .../fileIO/CSV/InternalResourceUtil.java | 19 +++++++++++++++++++ src/main/java/millions/view/StartView.java | 14 +++++++++----- 3 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 src/main/java/millions/controller/fileIO/CSV/InternalResourceUtil.java diff --git a/src/main/java/millions/controller/GameController.java b/src/main/java/millions/controller/GameController.java index 17157dc..819aa88 100644 --- a/src/main/java/millions/controller/GameController.java +++ b/src/main/java/millions/controller/GameController.java @@ -29,8 +29,8 @@ public void startGame( throw new IllegalArgumentException("Pre run weeks cannot be negative"); } try { - CSVFileHandler fileHandler = new CSVFileHandler(); - List stocks = fileHandler.getStocksFromFile(stockFilePath); + CSVFileHandler csvFileHandler = new CSVFileHandler(); + List stocks = csvFileHandler.getStocksFromFile(stockFilePath); exchange = new Exchange("Exchange", stocks); for (int i = 0; i < preRunWeeks; i++) { @@ -39,10 +39,10 @@ public void startGame( player = new Player(name, startingMoney); - } catch (FileNotFoundException e) { - throw new UncheckedFileNotFoundException(e.getMessage()); } catch (InvalidFormatException e) { throw new InvalidFormatException(e.getMessage()); + } catch (FileNotFoundException e) { + throw new UncheckedFileNotFoundException(e.getMessage()); } } diff --git a/src/main/java/millions/controller/fileIO/CSV/InternalResourceUtil.java b/src/main/java/millions/controller/fileIO/CSV/InternalResourceUtil.java new file mode 100644 index 0000000..3756d20 --- /dev/null +++ b/src/main/java/millions/controller/fileIO/CSV/InternalResourceUtil.java @@ -0,0 +1,19 @@ +package millions.controller.fileIO.CSV; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; + +public class InternalResourceUtil { + public File getFileFromJar(InputStream resource) throws IOException { + if (resource == null) { + throw new IOException("Resource not found is null"); + } + File tempFile = File.createTempFile("javafx_app_", ".tmp"); + tempFile.deleteOnExit(); + Files.copy(resource, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + return tempFile; + } +} diff --git a/src/main/java/millions/view/StartView.java b/src/main/java/millions/view/StartView.java index 481cff3..2bb7563 100644 --- a/src/main/java/millions/view/StartView.java +++ b/src/main/java/millions/view/StartView.java @@ -1,6 +1,8 @@ package millions.view; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.math.BigDecimal; import java.net.URISyntaxException; import java.net.URL; @@ -17,6 +19,7 @@ import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import javafx.stage.Stage; +import millions.controller.fileIO.CSV.InternalResourceUtil; /** The initial game setup screen where the player enters their info. */ public class StartView extends VBox { @@ -107,12 +110,13 @@ public StartView(Stage stage) { private File loadDefaultStocksFile() { try { - URL resource = Objects.requireNonNull(getClass().getResource("/data/default-stocks.csv")); - return Paths.get(resource.toURI()).toFile(); - } catch (URISyntaxException e) { - logger.log(Level.SEVERE, "Error accessing default stocks file", e); - throw new IllegalStateException("Could not load default stocks file", e); + InputStream resource = Objects.requireNonNull(getClass().getResourceAsStream("/data/default-stocks.csv")); + InternalResourceUtil converter = new InternalResourceUtil(); + return converter.getFileFromJar(resource); + } catch (IOException e) { + logger.log(Level.SEVERE, "error loading default file: ", e); } + return null; } /** Enables/Disables start button */