Skip to content

Instantly share code, notes, and snippets.

@robbystk
Created March 20, 2021 14:52
Show Gist options
  • Save robbystk/d4dc87c48505cfd31bea921cc19f5f9a to your computer and use it in GitHub Desktop.
Save robbystk/d4dc87c48505cfd31bea921cc19f5f9a to your computer and use it in GitHub Desktop.
Makefile for java
JFLAGS = -g
JC = javac
JVM = java
TARGET_DIR = bin
LIB_DIR = lib
TEST_JAR = $(LIB_DIR)/junit-platform-console-standalone-1.4.2.jar
DEPENDENCIES =
MAIN_DIR = src/main/java
TEST_DIR = src/test/java
TESTS = $(shell find $(TEST_DIR) -type f -name '*Test.java')
TEST_CLASSES = $(patsubst $(TEST_DIR)/%.java, $(TARGET_DIR)/%.class, $(TESTS))
MAIN_CLASS = com.foo.project.Main
MAIN_CLASS_FILE = $(TARGET_DIR)/$(subst .,/,$(MAIN_CLASS)).class
.SUFFIXES: .java .class
.PHONY: run test
.DEFAULT: run
# classes
$(TARGET_DIR)/%.class: $(MAIN_DIR)/%.java
$(JC) $(JFLAGS) -d $(TARGET_DIR) -cp $(TARGET_DIR):$(DEPENDENCIES) $<
# tests
$(TARGET_DIR)/%Test.class: $(TEST_DIR)/%Test.java $(TARGET_DIR)/%.class
$(JC) $(JFLAGS) -d $(TARGET_DIR) -cp $(TARGET_DIR):$(TEST_JAR):$(DEPENDENCIES) $<
# run all tests
test: $(TEST_CLASSES)
$(JVM) -jar $(TEST_JAR) -cp $(TARGET_DIR):$(DEPENDENCIES) --scan-class-path
# run main class
run: $(MAIN_CLASS_FILE)
$(JVM) -cp $(TARGET_DIR):$(DEPENDENCIES) $(MAIN_CLASS)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment