diff --git a/Build.java b/Build.java index 6b0d7be..793c500 100644 --- a/Build.java +++ b/Build.java @@ -1,8 +1,8 @@ import static nobuild.NoBuild.*; -import java.nio.file.Paths; +import java.util.ArrayDeque; import java.util.Arrays; -import java.util.stream.Collectors; +import java.util.Optional; public class Build { static final String program = "jtags"; @@ -10,32 +10,69 @@ public class Build { public static void main(String[] args) { rebuildSelf(Build.class, args); + var arguments = new ArrayDeque<>(Arrays.asList(args)); + + if (arguments.size() == 0) { + printUsage(); + System.exit(1); + } + String mainClass = "xyz.naofal.jtags.Jtags"; String[] sourcePaths = glob("src/main/java/**.java"); - String[] classPaths = glob("third-party/jars/*.jar"); + String[] classPaths = {}; + var subcommand = arguments.pop(); + switch (subcommand) { + case "build": + buildJtags(mainClass, sourcePaths, classPaths); + break; + + case "run": + buildJtags(mainClass, sourcePaths, classPaths); + runJava(classPaths, mainClass, arguments.toArray(String[]::new)); + break; + + case "package": + buildJtags(mainClass, sourcePaths, classPaths); + packageJar(Optional.ofNullable(arguments.poll())); + break; + + default: + logger.severe("Unknown subcommand: " + subcommand); + printUsage(); + System.exit(1); + break; + } + } + + static void buildJtags(String mainClass, String[] sourcePaths, String[] classPaths) { if (classNeedsRebuild(mainClass, sourcePaths)) { - ensureDependencies(); logger.info("Compiling %s...".formatted(program)); compileJava(classPaths, sourcePaths); } - - var argumentPartitions = - Arrays.stream(args).collect(Collectors.partitioningBy(it -> it.startsWith("-D"))); - String[] javaArguments = argumentPartitions.get(true).toArray(String[]::new); - String[] programArguments = argumentPartitions.get(false).toArray(String[]::new); - - runJava(classPaths, javaArguments, mainClass, programArguments); } - private static void ensureDependencies() { - Dependency[] dependencies = { - new Dependency("com.h2database", "h2", "2.3.232"), - }; + static void packageJar(Optional jarfile) { + command( + "jar", + "cfe", + jarfile.orElse("Jtags.jar"), + "xyz.naofal.jtags.Jtags", + "-C", + buildClassPath, + "."); + } - if (!downloadDependencies(mavenCentral, Paths.get("third-party", "jars"), dependencies)) { - logger.severe("Could not download all dependencies"); - System.exit(1); - } + static void printUsage() { + System.err.println( + """ + Usage: java Build [args...] + Subcommands: + build Build %1$s + run [args...] Run %1$s with arguments + package Package %1$s to a JAR file + [file] Output JAR filename [Default: Jtags.jar] + """ + .formatted(program)); } }