From 10e36a8910653a73910b7be654b3467ece511d9b Mon Sep 17 00:00:00 2001 From: Kostya Date: Thu, 6 Aug 2026 21:17:22 +0000 Subject: wireframe --- .classpath | 20 ------ .gitignore | 1 + .project | 28 ++------- build.bat | 72 ---------------------- build.sh | 61 ------------------ modules/api/.classpath | 20 ++++++ modules/api/.project | 28 +++++++++ .../src/main/java/market/guess/api/Commission.java | 3 + .../market/guess/api/CommissionChargeType.java | 6 ++ .../src/main/java/market/guess/api/EventDTO.java | 1 + .../main/java/market/guess/api/EventStatus.java | 7 +++ .../main/java/market/guess/api/LoadResultDTO.java | 3 + modules/api/src/test/java/com/example/AppTest.java | 3 + modules/engine/.classpath | 22 +++++++ modules/engine/.project | 28 +++++++++ .../market/guess/engine/GuessMarketEngine.java | 7 +++ .../java/market/guess/engine/TradingMechanism.java | 7 +++ .../engine/mechanism/LmsrTradingMechanism.java | 13 ++++ .../guess/engine/mechanism/OrderBookMechanism.java | 13 ++++ .../engine/src/test/java/com/example/AppTest.java | 3 + modules/exception/.classpath | 20 ++++++ modules/exception/.project | 28 +++++++++ modules/exception/src/confing.properties | 0 .../guess/exception/GuessMarketException.java | 7 +++ .../src/test/java/com/example/AppTest.java | 3 + modules/ui-console/.classpath | 20 ++++++ modules/ui-console/.project | 28 +++++++++ .../src/main/java/market/guess/ui/console/App.java | 7 +++ .../src/test/java/com/example/AppTest.java | 3 + modules/ui-desktop/.classpath | 20 ++++++ modules/ui-desktop/.project | 28 +++++++++ .../src/main/java/market/guess/ui/desktop/App.java | 5 ++ run.bat | 16 ----- run.sh | 12 ---- src/confing.properties | 0 src/main/java/com/example/App.java | 7 --- src/test/java/com/example/AppTest.java | 3 - tools/build.bat | 72 ++++++++++++++++++++++ tools/build.sh | 61 ++++++++++++++++++ tools/run.bat | 16 +++++ tools/run.sh | 12 ++++ 41 files changed, 499 insertions(+), 215 deletions(-) delete mode 100644 .classpath delete mode 100644 build.bat delete mode 100755 build.sh create mode 100644 modules/api/.classpath create mode 100644 modules/api/.project create mode 100644 modules/api/src/main/java/market/guess/api/Commission.java create mode 100644 modules/api/src/main/java/market/guess/api/CommissionChargeType.java create mode 100644 modules/api/src/main/java/market/guess/api/EventDTO.java create mode 100644 modules/api/src/main/java/market/guess/api/EventStatus.java create mode 100644 modules/api/src/main/java/market/guess/api/LoadResultDTO.java create mode 100644 modules/api/src/test/java/com/example/AppTest.java create mode 100644 modules/engine/.classpath create mode 100644 modules/engine/.project create mode 100644 modules/engine/src/main/java/market/guess/engine/GuessMarketEngine.java create mode 100644 modules/engine/src/main/java/market/guess/engine/TradingMechanism.java create mode 100644 modules/engine/src/main/java/market/guess/engine/mechanism/LmsrTradingMechanism.java create mode 100644 modules/engine/src/main/java/market/guess/engine/mechanism/OrderBookMechanism.java create mode 100644 modules/engine/src/test/java/com/example/AppTest.java create mode 100644 modules/exception/.classpath create mode 100644 modules/exception/.project create mode 100644 modules/exception/src/confing.properties create mode 100644 modules/exception/src/main/java/market/guess/exception/GuessMarketException.java create mode 100644 modules/exception/src/test/java/com/example/AppTest.java create mode 100644 modules/ui-console/.classpath create mode 100644 modules/ui-console/.project create mode 100644 modules/ui-console/src/main/java/market/guess/ui/console/App.java create mode 100644 modules/ui-console/src/test/java/com/example/AppTest.java create mode 100644 modules/ui-desktop/.classpath create mode 100644 modules/ui-desktop/.project create mode 100644 modules/ui-desktop/src/main/java/market/guess/ui/desktop/App.java delete mode 100644 run.bat delete mode 100644 run.sh delete mode 100644 src/confing.properties delete mode 100644 src/main/java/com/example/App.java delete mode 100644 src/test/java/com/example/AppTest.java create mode 100644 tools/build.bat create mode 100755 tools/build.sh create mode 100644 tools/run.bat create mode 100644 tools/run.sh diff --git a/.classpath b/.classpath deleted file mode 100644 index 7f8bc25..0000000 --- a/.classpath +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/.gitignore b/.gitignore index 774d6b1..8e3b8c9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ bin/ stage/ dist/ +test-data/ *.class # Ignore OS-specific files diff --git a/.project b/.project index c3b90e2..3f22e24 100644 --- a/.project +++ b/.project @@ -1,28 +1,8 @@ - App + guess-market - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - - - 1784965956299 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - + + + diff --git a/build.bat b/build.bat deleted file mode 100644 index eb6b460..0000000 --- a/build.bat +++ /dev/null @@ -1,72 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -echo === 1. Cleaning Workspace === -if exist bin rmdir /s /q bin -if exist stage rmdir /s /q stage -if exist dist rmdir /s /q dist -mkdir bin\classes -mkdir bin\test-classes -mkdir stage -mkdir dist - -echo === 2. Compiling Production Code === -dir /s /b src\main\java\*.java > sources.txt -javac -d bin\classes -cp "lib/*" @sources.txt -if %errorlevel% neq 0 exit /b %errorlevel% - -echo === 3. Compiling Test Code === -dir /s /b src\test\java\*.java > test-sources.txt -javac -d bin\test-classes -cp "bin\classes;lib/*" @test-sources.txt -if %errorlevel% neq 0 exit /b %errorlevel% - -echo === 4. Running Automated Tests === -set "JUNIT_JAR=" -for %%f in (lib\junit-platform-console-standalone-*.jar) do set "JUNIT_JAR=%%f" -if not defined JUNIT_JAR (echo JUnit jar missing. & exit /b 1) - -rem JUnit's --class-path does NOT expand lib\* -> build it explicitly -set "TEST_CP=bin\classes;bin\test-classes" -for %%j in (lib\*.jar) do set "TEST_CP=!TEST_CP!;%%j" - -java -jar "!JUNIT_JAR!" execute -cp "!TEST_CP!" --scan-classpath -if %errorlevel% neq 0 ( - echo [X] Tests failed! Aborting build package. - exit /b %errorlevel% -) -echo [OK] Tests passed successfully! - -echo === 5. Extracting Dependencies for Fat JAR === -cd stage -for %%j in (..\lib\*.jar) do ( - echo %%~nxj | findstr /i "junit-platform-console-standalone" >nul - if errorlevel 1 ( - echo Extracting: %%~nxj - jar -xf "%%j" - ) -) - -rem Strip signatures + manifests (they break repacking) but KEEP -rem META-INF\services so ServiceLoader-based deps still work at runtime. -if exist META-INF ( - del /s /q META-INF\*.SF >nul 2>&1 - del /s /q META-INF\*.RSA >nul 2>&1 - del /s /q META-INF\*.DSA >nul 2>&1 - del /q META-INF\MANIFEST.MF >nul 2>&1 -) -cd .. - -echo === 6. Merging Assets into Fat JAR === -rem Merge ONLY production classes on top of the extracted deps -xcopy /e /q /y /i bin\classes\* stage\ >nul -rem Package the whole tree (deps + your classes), not just stage\classes -jar cfe dist/app.jar com.example.App -C stage . -if %errorlevel% neq 0 exit /b %errorlevel% - -del sources.txt test-sources.txt >nul 2>&1 -rmdir /s /q stage -echo ====================================== -echo Fat JAR Created! Run it with: -echo java -jar dist/app.jar -echo ====================================== -pause diff --git a/build.sh b/build.sh deleted file mode 100755 index 6fdf7e1..0000000 --- a/build.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -set -e - -echo "=== 1. Cleaning Workspace ===" -rm -rf bin stage -mkdir -p bin/classes bin/test-classes stage dist # dist was never created - -echo "=== 2. Compiling Production Code ===" -javac -d bin/classes -cp "lib/*" @<(find src/main/java -name '*.java') - -echo "=== 3. Compiling Test Code ===" -# prod classes are in bin/classes, not bin -javac -d bin/test-classes -cp "bin/classes:lib/*" @<(find src/test/java -name '*.java') - -echo "=== 4. Running Automated Tests ===" -JUNIT_JAR=$(find lib -maxdepth 1 -name 'junit-platform-console-standalone-*.jar' | head -n 1) -if [ -z "$JUNIT_JAR" ]; then - echo "JUnit jar missing." - exit 1 -fi - -set +e -java -jar "$JUNIT_JAR" execute \ - -cp "bin/classes:bin/test-classes:lib/*" \ - --scan-classpath -TEST_STATUS=$? -set -e - -if [ $TEST_STATUS -ne 0 ]; then - echo "❌ Tests failed! Aborting build package." - exit 1 -fi -echo "✅ Tests passed successfully!" - -echo "=== 5. Extracting Dependencies for Fat JAR ===" -cd stage -for jarfile in ../lib/*.jar; do - [ -f "$jarfile" ] || continue - case "$(basename "$jarfile")" in - junit-platform-console-standalone-*) continue ;; - esac - echo "Extracting: $(basename "$jarfile")" - jar -xf "$jarfile" -done - -# Strip signatures + manifests (they break repacking), but KEEP -# META-INF/services so ServiceLoader-based deps still work at runtime. -find META-INF -type f \( -name '*.SF' -o -name '*.RSA' -o -name '*.DSA' -o -name 'MANIFEST.MF' \) -delete 2>/dev/null || true -cd .. - -echo "=== 6. Merging Assets into Fat JAR ===" -# Merge YOUR production classes on top of the extracted deps -cp -r bin/classes/. stage/ -# Package the whole tree (deps + your classes), not just stage/classes -jar cfe dist/app.jar com.example.App -C stage . - -rm -rf stage -echo "======================================" -echo "🎉 Fat JAR Created! Run it with:" -echo "java -jar dist/app.jar" -echo "======================================" diff --git a/modules/api/.classpath b/modules/api/.classpath new file mode 100644 index 0000000..7f8bc25 --- /dev/null +++ b/modules/api/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/api/.project b/modules/api/.project new file mode 100644 index 0000000..0dc50c5 --- /dev/null +++ b/modules/api/.project @@ -0,0 +1,28 @@ + + + guess-market-api + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + 1786044291084 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/modules/api/src/main/java/market/guess/api/Commission.java b/modules/api/src/main/java/market/guess/api/Commission.java new file mode 100644 index 0000000..96cab8a --- /dev/null +++ b/modules/api/src/main/java/market/guess/api/Commission.java @@ -0,0 +1,3 @@ +package market.guess.api; + +public record Commission(CommissionChargeType type, int percentage) {} diff --git a/modules/api/src/main/java/market/guess/api/CommissionChargeType.java b/modules/api/src/main/java/market/guess/api/CommissionChargeType.java new file mode 100644 index 0000000..75e409b --- /dev/null +++ b/modules/api/src/main/java/market/guess/api/CommissionChargeType.java @@ -0,0 +1,6 @@ +package market.guess.api; + +public enum CommissionChargeType { + ON_CLOSE, + ON_PURCHASE +} diff --git a/modules/api/src/main/java/market/guess/api/EventDTO.java b/modules/api/src/main/java/market/guess/api/EventDTO.java new file mode 100644 index 0000000..66b2312 --- /dev/null +++ b/modules/api/src/main/java/market/guess/api/EventDTO.java @@ -0,0 +1 @@ +package market.guess.api; diff --git a/modules/api/src/main/java/market/guess/api/EventStatus.java b/modules/api/src/main/java/market/guess/api/EventStatus.java new file mode 100644 index 0000000..acd7542 --- /dev/null +++ b/modules/api/src/main/java/market/guess/api/EventStatus.java @@ -0,0 +1,7 @@ +package market.guess.api; + +public enum EventStatus { + NOT_STARTED, + ACTIVE, + CLOSED +} diff --git a/modules/api/src/main/java/market/guess/api/LoadResultDTO.java b/modules/api/src/main/java/market/guess/api/LoadResultDTO.java new file mode 100644 index 0000000..cf3630b --- /dev/null +++ b/modules/api/src/main/java/market/guess/api/LoadResultDTO.java @@ -0,0 +1,3 @@ +package market.guess.api; + +public record LoadResultDTO() {} diff --git a/modules/api/src/test/java/com/example/AppTest.java b/modules/api/src/test/java/com/example/AppTest.java new file mode 100644 index 0000000..0b08c28 --- /dev/null +++ b/modules/api/src/test/java/com/example/AppTest.java @@ -0,0 +1,3 @@ +package com.example; + +public class AppTest {} diff --git a/modules/engine/.classpath b/modules/engine/.classpath new file mode 100644 index 0000000..27bd88b --- /dev/null +++ b/modules/engine/.classpath @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/engine/.project b/modules/engine/.project new file mode 100644 index 0000000..943db42 --- /dev/null +++ b/modules/engine/.project @@ -0,0 +1,28 @@ + + + gauss-market-engine + + + gauss-market-api + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.jdt.core.javanature + + + + 1784965956299 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/modules/engine/src/main/java/market/guess/engine/GuessMarketEngine.java b/modules/engine/src/main/java/market/guess/engine/GuessMarketEngine.java new file mode 100644 index 0000000..aab3cf4 --- /dev/null +++ b/modules/engine/src/main/java/market/guess/engine/GuessMarketEngine.java @@ -0,0 +1,7 @@ +package market.guess.engine; + +import market.guess.api.LoadResultDTO; + +public interface GuessMarketEngine { + LoadResultDTO loadEvents(); +} diff --git a/modules/engine/src/main/java/market/guess/engine/TradingMechanism.java b/modules/engine/src/main/java/market/guess/engine/TradingMechanism.java new file mode 100644 index 0000000..5a235ed --- /dev/null +++ b/modules/engine/src/main/java/market/guess/engine/TradingMechanism.java @@ -0,0 +1,7 @@ +package market.guess.engine; + +import java.math.BigDecimal; + +public interface TradingMechanism { + BigDecimal initialCost(); +} diff --git a/modules/engine/src/main/java/market/guess/engine/mechanism/LmsrTradingMechanism.java b/modules/engine/src/main/java/market/guess/engine/mechanism/LmsrTradingMechanism.java new file mode 100644 index 0000000..93826b7 --- /dev/null +++ b/modules/engine/src/main/java/market/guess/engine/mechanism/LmsrTradingMechanism.java @@ -0,0 +1,13 @@ +package market.guess.engine.mechanism; + +import java.math.BigDecimal; +import market.guess.engine.TradingMechanism; + +public class LmsrTradingMechanism implements TradingMechanism { + + @Override + public BigDecimal initialCost() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'initialCost'"); + } +} diff --git a/modules/engine/src/main/java/market/guess/engine/mechanism/OrderBookMechanism.java b/modules/engine/src/main/java/market/guess/engine/mechanism/OrderBookMechanism.java new file mode 100644 index 0000000..079b204 --- /dev/null +++ b/modules/engine/src/main/java/market/guess/engine/mechanism/OrderBookMechanism.java @@ -0,0 +1,13 @@ +package market.guess.engine.mechanism; + +import java.math.BigDecimal; +import market.guess.engine.TradingMechanism; + +public class OrderBookMechanism implements TradingMechanism { + + @Override + public BigDecimal initialCost() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'initialCost'"); + } +} diff --git a/modules/engine/src/test/java/com/example/AppTest.java b/modules/engine/src/test/java/com/example/AppTest.java new file mode 100644 index 0000000..0b08c28 --- /dev/null +++ b/modules/engine/src/test/java/com/example/AppTest.java @@ -0,0 +1,3 @@ +package com.example; + +public class AppTest {} diff --git a/modules/exception/.classpath b/modules/exception/.classpath new file mode 100644 index 0000000..7f8bc25 --- /dev/null +++ b/modules/exception/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/exception/.project b/modules/exception/.project new file mode 100644 index 0000000..5af632c --- /dev/null +++ b/modules/exception/.project @@ -0,0 +1,28 @@ + + + guess-market-exception + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + 1784965956299 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/modules/exception/src/confing.properties b/modules/exception/src/confing.properties new file mode 100644 index 0000000..e69de29 diff --git a/modules/exception/src/main/java/market/guess/exception/GuessMarketException.java b/modules/exception/src/main/java/market/guess/exception/GuessMarketException.java new file mode 100644 index 0000000..68a3053 --- /dev/null +++ b/modules/exception/src/main/java/market/guess/exception/GuessMarketException.java @@ -0,0 +1,7 @@ +package market.guess.exception; + +public class GuessMarketException extends Exception { + public GuessMarketException(String message) { + super(message); + } +} diff --git a/modules/exception/src/test/java/com/example/AppTest.java b/modules/exception/src/test/java/com/example/AppTest.java new file mode 100644 index 0000000..0b08c28 --- /dev/null +++ b/modules/exception/src/test/java/com/example/AppTest.java @@ -0,0 +1,3 @@ +package com.example; + +public class AppTest {} diff --git a/modules/ui-console/.classpath b/modules/ui-console/.classpath new file mode 100644 index 0000000..7f8bc25 --- /dev/null +++ b/modules/ui-console/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/ui-console/.project b/modules/ui-console/.project new file mode 100644 index 0000000..9e047cb --- /dev/null +++ b/modules/ui-console/.project @@ -0,0 +1,28 @@ + + + guess-market-ui-console + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + 1784965956299 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/modules/ui-console/src/main/java/market/guess/ui/console/App.java b/modules/ui-console/src/main/java/market/guess/ui/console/App.java new file mode 100644 index 0000000..06be86d --- /dev/null +++ b/modules/ui-console/src/main/java/market/guess/ui/console/App.java @@ -0,0 +1,7 @@ +package market.guess.ui.console; + +public class App { + public static void main() { + IO.println("Hello World"); + } +} diff --git a/modules/ui-console/src/test/java/com/example/AppTest.java b/modules/ui-console/src/test/java/com/example/AppTest.java new file mode 100644 index 0000000..0b08c28 --- /dev/null +++ b/modules/ui-console/src/test/java/com/example/AppTest.java @@ -0,0 +1,3 @@ +package com.example; + +public class AppTest {} diff --git a/modules/ui-desktop/.classpath b/modules/ui-desktop/.classpath new file mode 100644 index 0000000..7f8bc25 --- /dev/null +++ b/modules/ui-desktop/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/ui-desktop/.project b/modules/ui-desktop/.project new file mode 100644 index 0000000..e421bbf --- /dev/null +++ b/modules/ui-desktop/.project @@ -0,0 +1,28 @@ + + + guess-market-ui-desktop + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + 1786044291088 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/modules/ui-desktop/src/main/java/market/guess/ui/desktop/App.java b/modules/ui-desktop/src/main/java/market/guess/ui/desktop/App.java new file mode 100644 index 0000000..70a7e7d --- /dev/null +++ b/modules/ui-desktop/src/main/java/market/guess/ui/desktop/App.java @@ -0,0 +1,5 @@ +package market.guess.ui.desktop; + +public class App { + public static void main(String[] args) {} +} diff --git a/run.bat b/run.bat deleted file mode 100644 index 8480652..0000000 --- a/run.bat +++ /dev/null @@ -1,16 +0,0 @@ -@echo off -:: clean old binaries -rmdir /s /q bin -mkdir bin - -:: compile source files and include libraries -javac -d "bin/classes" -cp "lib/*" src/main/java/com/example/App.java - -:: run the application if compilation succeeded -if %errorlevel% equ 0 ( - echo --- Running Application --- - java -cp "bin/classes;lib/*" com.example.App -) else ( - echo Compilation failed. -) -pause diff --git a/run.sh b/run.sh deleted file mode 100644 index 55f1094..0000000 --- a/run.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# clean up -rm -rf bin && mkdir bin - -# run the app if compilation succeeded -if javac -d "bin/classes" -cp "lib/*" src/main/java/com/example/App.java; then - echo "--- Running Application ---" - java -cp "bin/classes:lib/*" com.example.App -else - echo "Compilation failed." -fi diff --git a/src/confing.properties b/src/confing.properties deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/com/example/App.java b/src/main/java/com/example/App.java deleted file mode 100644 index 5777405..0000000 --- a/src/main/java/com/example/App.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.example; - -public class App { - public static void main() { - IO.println("Hello World"); - } -} diff --git a/src/test/java/com/example/AppTest.java b/src/test/java/com/example/AppTest.java deleted file mode 100644 index 0b08c28..0000000 --- a/src/test/java/com/example/AppTest.java +++ /dev/null @@ -1,3 +0,0 @@ -package com.example; - -public class AppTest {} diff --git a/tools/build.bat b/tools/build.bat new file mode 100644 index 0000000..eb6b460 --- /dev/null +++ b/tools/build.bat @@ -0,0 +1,72 @@ +@echo off +setlocal enabledelayedexpansion + +echo === 1. Cleaning Workspace === +if exist bin rmdir /s /q bin +if exist stage rmdir /s /q stage +if exist dist rmdir /s /q dist +mkdir bin\classes +mkdir bin\test-classes +mkdir stage +mkdir dist + +echo === 2. Compiling Production Code === +dir /s /b src\main\java\*.java > sources.txt +javac -d bin\classes -cp "lib/*" @sources.txt +if %errorlevel% neq 0 exit /b %errorlevel% + +echo === 3. Compiling Test Code === +dir /s /b src\test\java\*.java > test-sources.txt +javac -d bin\test-classes -cp "bin\classes;lib/*" @test-sources.txt +if %errorlevel% neq 0 exit /b %errorlevel% + +echo === 4. Running Automated Tests === +set "JUNIT_JAR=" +for %%f in (lib\junit-platform-console-standalone-*.jar) do set "JUNIT_JAR=%%f" +if not defined JUNIT_JAR (echo JUnit jar missing. & exit /b 1) + +rem JUnit's --class-path does NOT expand lib\* -> build it explicitly +set "TEST_CP=bin\classes;bin\test-classes" +for %%j in (lib\*.jar) do set "TEST_CP=!TEST_CP!;%%j" + +java -jar "!JUNIT_JAR!" execute -cp "!TEST_CP!" --scan-classpath +if %errorlevel% neq 0 ( + echo [X] Tests failed! Aborting build package. + exit /b %errorlevel% +) +echo [OK] Tests passed successfully! + +echo === 5. Extracting Dependencies for Fat JAR === +cd stage +for %%j in (..\lib\*.jar) do ( + echo %%~nxj | findstr /i "junit-platform-console-standalone" >nul + if errorlevel 1 ( + echo Extracting: %%~nxj + jar -xf "%%j" + ) +) + +rem Strip signatures + manifests (they break repacking) but KEEP +rem META-INF\services so ServiceLoader-based deps still work at runtime. +if exist META-INF ( + del /s /q META-INF\*.SF >nul 2>&1 + del /s /q META-INF\*.RSA >nul 2>&1 + del /s /q META-INF\*.DSA >nul 2>&1 + del /q META-INF\MANIFEST.MF >nul 2>&1 +) +cd .. + +echo === 6. Merging Assets into Fat JAR === +rem Merge ONLY production classes on top of the extracted deps +xcopy /e /q /y /i bin\classes\* stage\ >nul +rem Package the whole tree (deps + your classes), not just stage\classes +jar cfe dist/app.jar com.example.App -C stage . +if %errorlevel% neq 0 exit /b %errorlevel% + +del sources.txt test-sources.txt >nul 2>&1 +rmdir /s /q stage +echo ====================================== +echo Fat JAR Created! Run it with: +echo java -jar dist/app.jar +echo ====================================== +pause diff --git a/tools/build.sh b/tools/build.sh new file mode 100755 index 0000000..6fdf7e1 --- /dev/null +++ b/tools/build.sh @@ -0,0 +1,61 @@ +#!/bin/bash +set -e + +echo "=== 1. Cleaning Workspace ===" +rm -rf bin stage +mkdir -p bin/classes bin/test-classes stage dist # dist was never created + +echo "=== 2. Compiling Production Code ===" +javac -d bin/classes -cp "lib/*" @<(find src/main/java -name '*.java') + +echo "=== 3. Compiling Test Code ===" +# prod classes are in bin/classes, not bin +javac -d bin/test-classes -cp "bin/classes:lib/*" @<(find src/test/java -name '*.java') + +echo "=== 4. Running Automated Tests ===" +JUNIT_JAR=$(find lib -maxdepth 1 -name 'junit-platform-console-standalone-*.jar' | head -n 1) +if [ -z "$JUNIT_JAR" ]; then + echo "JUnit jar missing." + exit 1 +fi + +set +e +java -jar "$JUNIT_JAR" execute \ + -cp "bin/classes:bin/test-classes:lib/*" \ + --scan-classpath +TEST_STATUS=$? +set -e + +if [ $TEST_STATUS -ne 0 ]; then + echo "❌ Tests failed! Aborting build package." + exit 1 +fi +echo "✅ Tests passed successfully!" + +echo "=== 5. Extracting Dependencies for Fat JAR ===" +cd stage +for jarfile in ../lib/*.jar; do + [ -f "$jarfile" ] || continue + case "$(basename "$jarfile")" in + junit-platform-console-standalone-*) continue ;; + esac + echo "Extracting: $(basename "$jarfile")" + jar -xf "$jarfile" +done + +# Strip signatures + manifests (they break repacking), but KEEP +# META-INF/services so ServiceLoader-based deps still work at runtime. +find META-INF -type f \( -name '*.SF' -o -name '*.RSA' -o -name '*.DSA' -o -name 'MANIFEST.MF' \) -delete 2>/dev/null || true +cd .. + +echo "=== 6. Merging Assets into Fat JAR ===" +# Merge YOUR production classes on top of the extracted deps +cp -r bin/classes/. stage/ +# Package the whole tree (deps + your classes), not just stage/classes +jar cfe dist/app.jar com.example.App -C stage . + +rm -rf stage +echo "======================================" +echo "🎉 Fat JAR Created! Run it with:" +echo "java -jar dist/app.jar" +echo "======================================" diff --git a/tools/run.bat b/tools/run.bat new file mode 100644 index 0000000..8480652 --- /dev/null +++ b/tools/run.bat @@ -0,0 +1,16 @@ +@echo off +:: clean old binaries +rmdir /s /q bin +mkdir bin + +:: compile source files and include libraries +javac -d "bin/classes" -cp "lib/*" src/main/java/com/example/App.java + +:: run the application if compilation succeeded +if %errorlevel% equ 0 ( + echo --- Running Application --- + java -cp "bin/classes;lib/*" com.example.App +) else ( + echo Compilation failed. +) +pause diff --git a/tools/run.sh b/tools/run.sh new file mode 100644 index 0000000..55f1094 --- /dev/null +++ b/tools/run.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# clean up +rm -rf bin && mkdir bin + +# run the app if compilation succeeded +if javac -d "bin/classes" -cp "lib/*" src/main/java/com/example/App.java; then + echo "--- Running Application ---" + java -cp "bin/classes:lib/*" com.example.App +else + echo "Compilation failed." +fi -- cgit v1.2.3