# GNUMake snippet for java compilation and execution # # SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2024-2025 Jonas Smedegaard # # Setup: # In main Makefile... # * set variable PROJECT # * set variables PROJECT_FLAVORS CLASSPATHS MODULEPATHS JAVAMODULES # if needed # * include this make snippet STEMS = $(PROJECT) $(PROJECT_FLAVORS:%=$(PROJECT)%) $(EXTRASTEMS) CLASSES = $(STEMS:=.class) # account for one annoyingly popular class of non-POSIX system _java_path_separator := $(if $(filter Windows%,$($(shell uname))),;,:) _java_module_separator = , _java_flag = $(if $2,--$1 $(subst $() ,$3,$(strip $2))) _java_common_flags = $(strip \ $(call _java_flag,class-path,$(CLASSPATHS),$(_java_path_separator)) \ $(call _java_flag,module-path,$(MODULEPATHS),$(_java_path_separator)) \ $(call _java_flag,add-modules,$(JAVAMODULES),$(_java_module_separator))) # defaults overridable at make invocation JAVAC ?= javac JAVA ?= java JAVACFLAGS ?= $(strip $(_java_common_flags) -Xlint -Xdoclint -implicit:none) JAVAFLAGS ?= $(strip $(_java_common_flags)) all:: run-$(PROJECT) clean:: rm -f $(CLASSES) $(STEMS:%=check-%): check-%: checkstyle -c ./_checkstyle/checks.xml $*.java $(STEMS:%=run-%): run-%: %.class $(or $(RUNTIME_ENV_$*),$(RUNTIME_ENV)) $(JAVA) $(JAVAFLAGS) $*.java $(or $(RUNTIME_ARGS_$*),$(RUNTIME_ARGS)) %.class: %.java $(JAVAC) $(JAVACFLAGS) $< .PHONY: all clean $(STEMS:%=run-%)