- # GNUMake snippet for java compilation and execution
- #
- # SPDX-License-Identifier: GPL-3.0-or-later
- # SPDX-FileCopyrightText: 2024-2025 Jonas Smedegaard <dr@jones.dk>
- #
- # 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)
- 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-%)
|