From 73e6d290b8c686ccc5a1bcbe24a72d33dffd1704 Mon Sep 17 00:00:00 2001 From: Alessandro Iezzi Date: Thu, 14 Dec 2023 12:16:12 +0100 Subject: Separate compilation of src/main and src/test No need to build mk. --- java.mvn.mk | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file 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'` $@ -- cgit v1.2.3