-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild.sh
More file actions
129 lines (106 loc) · 4.18 KB
/
Copy pathbuild.sh
File metadata and controls
129 lines (106 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env bash
set -e
if ! command -v java &>/dev/null; then
echo "ERROR: Java is not installed or not in PATH. Install JDK 17 or newer." >&2
exit 1
fi
if ! command -v javac &>/dev/null; then
echo "ERROR: javac not found. You have a JRE, not a JDK. Install JDK 17 or newer." >&2
exit 1
fi
if [ "${SKIP_JPACKAGE:-0}" != "1" ] && ! command -v jpackage &>/dev/null; then
echo "ERROR: jpackage not found. Install JDK 17 or newer." >&2
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
JAR_OUTPUT_DIR="Jar Output"
EXE_OUTPUT_DIR="Exe Output"
CLASSES_DIR="$JAR_OUTPUT_DIR/classes"
PACKAGE_INPUT_DIR="$JAR_OUTPUT_DIR/jpackage-input"
rm -rf "$JAR_OUTPUT_DIR"
mkdir -p "$CLASSES_DIR"
if [ -d src/main/resources ]; then
cp -r src/main/resources/. "$CLASSES_DIR/"
fi
mkdir -p "$CLASSES_DIR/cache"
for cache_file in \
main_file_cache.dat \
main_file_cache.idx0 \
main_file_cache.idx1 \
main_file_cache.idx2 \
main_file_cache.idx3 \
main_file_cache.idx4; do
if [ -f "cache/$cache_file" ]; then
cp "cache/$cache_file" "$CLASSES_DIR/cache/"
fi
done
find src/main/java -name "*.java" > sources.txt
javac -J-Xmx1g --release 17 -encoding UTF-8 -cp "lib/*" -d "$CLASSES_DIR" @sources.txt
rm sources.txt
# Fold runtime dependencies and LWJGL natives into the artifact so the JAR can
# be copied and launched without a sibling lib directory.
for dependency in lib/*.jar; do
(cd "$CLASSES_DIR" && jar --extract --file "../../$dependency")
done
rm -f "$CLASSES_DIR/META-INF/MANIFEST.MF"
rm -f "$CLASSES_DIR"/META-INF/*.SF "$CLASSES_DIR"/META-INF/*.DSA "$CLASSES_DIR"/META-INF/*.RSA
BUILD_TIME="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
CLIENT_VERSION="${CLIENT_VERSION:-1.7}"
CLIENT_VERSION="${CLIENT_VERSION#v}"
cat > "$JAR_OUTPUT_DIR/config.json" <<EOF
{
"version": "$CLIENT_VERSION",
"web_host": "localhost",
"web_port": 80,
"game_port": 43594
}
EOF
printf 'Manifest-Version: 1.0\nImplementation-Version: %s\nBuild-Time: %s\n\n' "$CLIENT_VERSION" "$BUILD_TIME" > "$JAR_OUTPUT_DIR/manifest.mf"
# Build the updater jar first, then fold it into the client classes so it ships
# *inside* the client jar. At runtime the client extracts it back beside itself.
jar --create --file "$JAR_OUTPUT_DIR/Progressive-Java-Updater.jar" \
--main-class com.gradwahl.rs254.update.UpdateHelper \
-C "$CLASSES_DIR" com/gradwahl/rs254/update
cp "$JAR_OUTPUT_DIR/Progressive-Java-Updater.jar" "$CLASSES_DIR/Progressive-Java-Updater.jar"
jar --create --file "$JAR_OUTPUT_DIR/Progressive-Java-Client.jar" \
--main-class com.gradwahl.rs254.Main \
--manifest "$JAR_OUTPUT_DIR/manifest.mf" \
-C "$CLASSES_DIR" .
rm "$JAR_OUTPUT_DIR/manifest.mf"
echo "Build complete: Jar Output/Progressive-Java-Client.jar"
echo "Build complete: Jar Output/Progressive-Java-Updater.jar"
if [ "${SKIP_JPACKAGE:-0}" != "1" ]; then
rm -rf "$PACKAGE_INPUT_DIR"
mkdir -p "$PACKAGE_INPUT_DIR"
cp "$JAR_OUTPUT_DIR/Progressive-Java-Client.jar" "$PACKAGE_INPUT_DIR/"
cp "$JAR_OUTPUT_DIR/Progressive-Java-Updater.jar" "$PACKAGE_INPUT_DIR/"
cp "$JAR_OUTPUT_DIR/config.json" "$PACKAGE_INPUT_DIR/"
rm -rf "$EXE_OUTPUT_DIR"
mkdir -p "$EXE_OUTPUT_DIR"
JPACKAGE_ARGS=(
--type app-image
--name "Progressive Java Client"
--app-version "${CLIENT_VERSION:-1.7}"
--vendor "Gradwahl"
--description "Progressive Java Client"
--dest "$EXE_OUTPUT_DIR"
--input "$PACKAGE_INPUT_DIR"
--main-jar Progressive-Java-Client.jar
--arguments "10 0 highmem members 32"
--java-options "-Xmx1g"
--java-options "-Drs254.logDir=logs"
--java-options "-XX:ErrorFile=logs/jvm_crash_%p.log"
--java-options "--enable-native-access=ALL-UNNAMED"
--java-options "--add-opens=java.base/java.lang=ALL-UNNAMED"
--java-options "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED"
)
case "$(uname -s)" in
MINGW*|MSYS*|CYGWIN*)
JPACKAGE_ARGS+=(--icon src/main/resources/icon.ico)
;;
esac
jpackage "${JPACKAGE_ARGS[@]}"
echo "Packaged Progressive Java Client into Exe Output using jpackage type 'app-image'."
fi
echo "Run with: ./run.sh"