Skip to content

Instantly share code, notes, and snippets.

@bspaulding
Last active October 9, 2021 00:38
Show Gist options
  • Save bspaulding/58bb5230c090555913637e6b58bd1344 to your computer and use it in GitHub Desktop.
Save bspaulding/58bb5230c090555913637e6b58bd1344 to your computer and use it in GitHub Desktop.
java app makefile
APP_NAME := $(shell basename $(shell pwd))
BUILD_DIR := build
SRC_DIR := src
SRCS := $(shell find $(SRC_DIR) -name '*.java')
CLSS := $(SRCS:$(SRC_DIR)/%.java=$(BUILD_DIR)/%.class)
.PHONY: run
run: $(BUILD_DIR)/$(APP_NAME).jar
java -jar $(BUILD_DIR)/$(APP_NAME).jar $(args)
$(BUILD_DIR)/$(APP_NAME).jar: $(BUILD_DIR)/Manifest.MF $(CLSS)
jar --create --manifest $(BUILD_DIR)/Manifest.MF --file $(BUILD_DIR)/$(APP_NAME).jar -C $(BUILD_DIR)/ .
$(BUILD_DIR)/$(APP_NAME): $(BUILD_DIR)/$(APP_NAME).jar
mkdir -p $(BUILD_DIR)/$(APP_NAME)
cd $(BUILD_DIR)/$(APP_NAME) && tar xzvf ../$(APP_NAME).jar
$(CLSS): $(BUILD_DIR)/classes.list
javac -d $(BUILD_DIR) @$(BUILD_DIR)/classes.list
$(BUILD_DIR)/classes.list: $(SRCS)
find $(SRC_DIR) -name '*.java' > $(BUILD_DIR)/classes.list
$(BUILD_DIR)/Manifest.MF: Manifest.MF
mkdir -p $(dir $@)
cp Manifest.MF $(BUILD_DIR)
.PHONY: clean
clean:
rm -rf build
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment