##AtCoderで使用するJavaのMakefileテンプレート(Windows)
Atcoder用なのでデフォルトパッケージです。
環境は、Windows OS
AIでひな形を作成し修正しました。
テストの方法
oj test -c "java.exe -classpath .\release Main" -d ./test
テストの方法は、javaファイルを直接実行する方法もあります。
oj test -c "java.exe Main.java" -d ./test
提出方法
acc submit Main.java -- -l 5005
5005 (Java (OpenJDK 17))
5009 (JavaScript (Node.js 18.16.1))
5010 (JavaScript (Deno 1.35.1))
###Makefile
デバッグビルド用の出力ディレクトリ .\debug
リリースビルド用の出力ディレクトリ .\release
となっています。
# Java用Makefile(Windows環境用)
# コンパイラ
JC = javac.exe
# Java実行環境
JVM = java.exe
# Javaデバッガ
JDB = jdb.exe
# javac コンパイルオプション
DEBUG_FLAGS = -g -encoding utf-8
DEBUG_FLAGS += -Xlint -deprecation -parameters
DEBUG_FLAGS += -verbose
#DEBUG_FLAGS += --enable-preview --source 21
RELEASE_FLAGS = -encoding utf-8
RELEASE_FLAGS += -Xlint -deprecation -parameters
#RELEASE_FLAGS += -verbose
#RELEASE_FLAGS += --enable-preview --source 21
# java 実行時オプション
DEBUG_EXE_FLAGS = -Dfile.encoding=utf-8 -showversion -verbose:gc -enableassertions
#DEBUG_EXE_FLAGS += --enable-preview
RELEASE_EXE_FLAGS = -Dfile.encoding=utf-8 -showversion -verbose:gc
#RELEASE_EXE_FLAGS += --enable-preview
# ソースファイルのディレクトリ
SRCDIR = .
#SRCDIR = src
# クラスファイルの出力ディレクトリ
BINDIR = .
#BINDIR = bin
# デバッグビルド用の出力ディレクトリ
DEBUGDIR = $(BINDIR)\debug
# リリースビルド用の出力ディレクトリ
RELEASEDIR = $(BINDIR)\release
# メインクラス(実行するクラス)
MAIN = Main
# パッケージ名(必要に応じて変更)
PACKAGE =
# ソースファイル
SOURCES = $(wildcard $(SRCDIR)/*.java)
# クラスファイル(デバッグ用)
DEBUG_CLASSES = $(patsubst $(SRCDIR)/%.java,$(DEBUGDIR)/%.class,$(SOURCES))
# クラスファイル(リリース用)
RELEASE_CLASSES = $(patsubst $(SRCDIR)/%.java,$(RELEASEDIR)/%.class,$(SOURCES))
# JARファイル名
JARFILE = $(MAIN).jar
# デフォルトターゲット
all: version release checkstyle
# デバッグビルド
debug: $(DEBUG_CLASSES)
# リリースビルド
release: $(RELEASE_CLASSES)
# デバッグ用クラスファイルのコンパイルルール
$(DEBUGDIR)/%.class: $(SRCDIR)/%.java
@if not exist $(DEBUGDIR) mkdir $(DEBUGDIR)
$(JC) $(DEBUG_FLAGS) -d $(DEBUGDIR) $<
# リリース用クラスファイルのコンパイルルール
$(RELEASEDIR)/%.class: $(SRCDIR)/%.java
@if not exist $(RELEASEDIR) mkdir $(RELEASEDIR)
$(JC) $(RELEASE_FLAGS) -d $(RELEASEDIR) $<
# プログラムの実行(デバッグビルド)
run-debug: $(DEBUG_CLASSES)
$(JVM) $(DEBUG_EXE_FLAGS) -cp $(DEBUGDIR) $(if $(PACKAGE),$(PACKAGE).)$(MAIN)
# プログラムの実行(リリースビルド)
run-release: $(RELEASE_CLASSES)
$(JVM) $(RELEASE_EXE_FLAGS) -cp $(RELEASEDIR) $(if $(PACKAGE),$(PACKAGE).)$(MAIN)
# デバッグモードでプログラムを実行
debug-mode: $(DEBUG_CLASSES)
$(JDB) -sourcepath $(SRCDIR) -classpath $(DEBUGDIR) $(if $(PACKAGE),$(PACKAGE).)$(MAIN)
# JARファイルの作成(リリースビルド)
jar: $(RELEASE_CLASSES)
@echo Main-Class: $(if $(PACKAGE),$(PACKAGE).)$(MAIN) > manifest.txt
jar.exe cvfm $(JARFILE) manifest.txt -C $(RELEASEDIR) .
@del manifest.txt
# JARファイルの実行
runjar: jar
$(JVM) -jar $(JARFILE)
# クリーンアップ
clean:
@if exist $(DEBUGDIR) ( \
rmdir /s /q $(DEBUGDIR) && \
echo $(DEBUGDIR) directory removed. \
) else ( \
echo $(DEBUGDIR) directory does not exist. \
)
@if exist $(RELEASEDIR) ( \
rmdir /s /q $(RELEASEDIR) && \
echo $(RELEASEDIR) directory removed. \
) else ( \
echo $(RELEASEDIR) directory does not exist. \
)
@if exist $(JARFILE) ( \
del $(JARFILE) && \
echo $(JARFILE) removed. \
) else ( \
echo $(JARFILE) does not exist. \
)
del out-google.txt
del out-sun.txt
del out.txt
#Checkstyle コードのスタイルと品質をチェックするツール
checkstyle:
-$(JVM) -jar C:\Users\etsuk\bin\checkstyle-10.18.1-all.jar -c /google_checks.xml -o out-google.txt $(MAIN).java
-$(JVM) -jar C:\Users\etsuk\bin\checkstyle-10.18.1-all.jar -c /sun_checks.xml -o out-sun.txt $(MAIN).java
-$(JVM) -jar C:\Users\etsuk\bin\checkstyle-10.18.1-all.jar -c C:\Users\etsuk\bin\MyJavaCheckStyle.xml -o out.txt $(MAIN).java
# バージョン情報の表示
version:
@$(JC) -version
@$(JVM) -version
@$(JDB) -version
# ヘルプ
help:
@echo Available targets:
@echo all : Compile all Java source files in release mode (default)
@echo debug : Compile all Java source files in debug mode
@echo release : Compile all Java source files in release mode
@echo run : Run the compiled Java program (release build)(default)
@echo run-debug : Run the compiled Java program (debug build)
@echo run-release : Run the compiled Java program (release build)
@echo debug-mode : Run the program in debug mode using JDB
@echo jar : Create a JAR file (using release build)
@echo runjar : Run the program from the JAR file
@echo clean : Remove compiled files and JAR
@echo version : Display Java compiler, runtime, and debugger versions
@echo help : Display this help message
# PHONYターゲット
.PHONY: all debug release run-debug run-release debug-mode jar runjar clean version help
# runターゲット(run-releaseのエイリアス)
run: run-release