summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-12-14 12:16:12 +0100
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-12-14 12:16:12 +0100
commit73e6d290b8c686ccc5a1bcbe24a72d33dffd1704 (patch)
tree2fb67527c15f9acd1d21cdf1bdc89cc30d380f54
parent38a037ac735c2f323958ea798eb4d7a3fab17d7d (diff)
downloadmk-73e6d290b8c686ccc5a1bcbe24a72d33dffd1704.tar.gz
mk-73e6d290b8c686ccc5a1bcbe24a72d33dffd1704.zip
Separate compilation of src/main and src/test
No need to build mk.
-rw-r--r--java.mvn.mk48
1 files changed, 40 insertions, 8 deletions
diff --git a/java.mvn.mk b/java.mvn.mk
index 864f6de..360c953 100644
--- a/java.mvn.mk
+++ b/java.mvn.mk
@@ -1,3 +1,5 @@
+.SUFFIXES: .java .class
+
ARTIFACT_ID != xmllint --xpath "/*[local-name()='project']/*[local-name()='artifactId']/text()" pom.xml
VERSION != xmllint --xpath "/*[local-name()='project']/*[local-name()='version']/text()" pom.xml
JAVA_VERSION != xmllint --xpath "/*[local-name()='project']/*[local-name()='properties']/*[local-name()='java.version']/text()" pom.xml
@@ -6,17 +8,31 @@ JC = JAVA_VERSION=${JAVA_VERSION} javac
MVN = mvn
JAVA = JAVA_VERSION=${JAVA_VERSION} java -classpath `cat .classpath`
JDB = jdb
+
+# Directories
BUILD_DIR = target
+CLASSES_DIR = ${BUILD_DIR}/classes
+TEST_CLASSES_DIR = ${BUILD_DIR}/test-classes
+SRC_PATH = src
+MAIN_SRC_PATH = ${SRC_PATH}/main/java
+TEST_SRC_PATH = ${SRC_PATH}/test/java
+
JAR = ${BUILD_DIR}/${ARTIFACT_ID}-${VERSION}.jar
MVN_FLAGS =
DBG_PORT = 1044
-SRC_PATH = src/main/java
-SRC != find src -name '*.java'
-OBJ != find src -name '*.java' | sed -E 's/^src\/main\/java/target\/classes/g' | sed -E 's/^src\/test\/java/target\/test-classes/g' | sed -E 's/\.java$$/\.class/g'
+
+MAIN_SRC != find ${MAIN_SRC_PATH} -name '*.java'
+TEST_SRC != find ${TEST_SRC_PATH} -name '*.java'
+
+MAIN_OBJ != echo ${MAIN_SRC} | sed -E 's|${MAIN_SRC_PATH}|${CLASSES_DIR}|g' \
+ | sed 's|\.java|\.class|g'
+TEST_OBJ != echo ${TEST_SRC} | sed -E 's|${TEST_SRC_PATH}|${TEST_CLASSES_DIR}|g' \
+ | sed 's|\.java|\.class|g'
+
DBG_PORT = 1044
DBG_FLAGS = -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${DBG_PORT}
-all: .classpath ${OBJ}
+all: .classpath ${MAIN_OBJ} ${TEST_OBJ}
run: .classpath .main-class
${JAVA} `cat .main-class` ${ARGS}
@@ -25,23 +41,24 @@ debug: .classpath .main-class
${JAVA} ${DBG_FLAGS} `cat .main-class` ${ARGS}
debugger:
- ${JDB} -sourcepath ${SRC_PATH} -attach ${DBG_PORT}
+ ${JDB} -sourcepath ${MAIN_SRC_PATH} -attach ${DBG_PORT}
.main-class:
- @echo ${SRC} | tr ' ' '\n' | fzf | sed -E 's/.*java\/(.*)\.java/\1/g' | tr '/' '.' > $@
+ @echo ${MAIN_SRC} | tr ' ' '\n' | fzf | sed -E 's/.*java\/(.*)\.java/\1/g' | tr '/' '.' > $@
.classpath: pom.xml
${MVN} ${MVN_FLAGS} dependency:build-classpath -Dmdep.outputFile=$@
@echo -n ':'target/classes >> $@
-.classes: ${SRC}
+.classes: ${MAIN_SRC}
for jar in `cat .classpath | tr ':' '\n' | grep -E '\.jar$$'`; do \
jar tvf $$jar | awk '{ print $$8 }'; \
done | grep -E '\.class$$' | grep -v package-info.class | sed -E 's/\$$[0-9]*//g' | sort | uniq > $@
- @echo ${SRC} | tr ' ' '\n' >> $@
+ @echo ${MAIN_SRC} | tr ' ' '\n' >> $@
clean:
@rm -rf ${BUILD_DIR}
+ @find ${SRC_PATH} -name '*.class' -exec rm -f {} \;
buildmk:
@for i in `find src -name *.java`; do \
@@ -57,3 +74,18 @@ buildmk:
.tags:
exctags -Rnf $@
+
+.java.class:
+ ${JC} -classpath `cat .classpath` $<
+
+${MAIN_OBJ}: ${MAIN_SRC} ${TEST_SRC}
+ @mkdir -p ${CLASSES_DIR}
+ @make `echo $@ | sed -E 's|${CLASSES_DIR}|${MAIN_SRC_PATH}|g'`
+ @mkdir -p `dirname $@`
+ @cp `echo $@ | sed -E 's|${CLASSES_DIR}|${MAIN_SRC_PATH}|g'` $@
+
+${TEST_OBJ}: ${MAIN_SRC} ${TEST_SRC}
+ @mkdir -p ${CLASSES_DIR}
+ @make `echo $@ | sed -E 's|${TEST_CLASSES_DIR}|${TEST_SRC_PATH}|g'`
+ @mkdir -p `dirname $@`
+ @cp `echo $@ | sed -E 's|${TEST_CLASSES_DIR}|${TEST_SRC_PATH}|g'` $@