diff --git a/.gitignore b/.gitignore
index d0bb1d9..b607676 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
.idea/
target/
+client-builds/
# Ignore the ./config directory so that developers can put their config files
# there for server and client apps.
diff --git a/build-clients.d b/build-clients.d
new file mode 100755
index 0000000..355c94c
--- /dev/null
+++ b/build-clients.d
@@ -0,0 +1,43 @@
+#!/usr/bin/env dub
+/+ dub.sdl:
+ dependency "dsh" version="~>1.6.1"
++/
+
+/**
+ * Builds OS-dependent client application versions.
+ */
+module build_clients;
+
+import dsh;
+import std.array;
+import std.algorithm;
+import std.string;
+import std.regex;
+import std.path;
+
+void main() {
+ string[] profiles = [
+ "linux-aarch64",
+ "linux-amd64",
+ "linux-arm",
+ "linux-arm32",
+ "macos-aarch64",
+ "macos-x86_64",
+ "windows-aarch64",
+ "windows-amd64",
+ "windows-x86"
+ ];
+ string outDir = "client-builds";
+ removeIfExists(outDir);
+ mkdir(outDir);
+ foreach (profile; profiles) {
+ print("Building profile: %s", profile);
+ string cmd = format!"mvn -B -Plwjgl-natives-%s --projects client --also-make clean package"(profile);
+ new ProcessBuilder()
+ .outputTo(buildPath(outDir, "output-" ~ profile ~ ".txt"))
+ .run(cmd);
+ string jarFile = findFile("client/target", ".+-jar-with-dependencies\\.jar");
+ string finalName = replaceFirst(baseName(jarFile), regex("jar-with-dependencies"), profile);
+ copy(jarFile, outDir ~ "/" ~ finalName);
+ }
+}
diff --git a/client/pom.xml b/client/pom.xml
index 6fc7531..b0c3bb7 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -144,7 +144,7 @@
nl.andrewl
aos2-core
- ${parent.version}
+ ${project.parent.version}
de.javagl
diff --git a/server/pom.xml b/server/pom.xml
index 8f1322e..dbb974e 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -20,7 +20,7 @@
nl.andrewl
aos2-core
- ${parent.version}
+ ${project.parent.version}
info.picocli