summaryrefslogtreecommitdiff
path: root/java.mvn.mk
diff options
context:
space:
mode:
Diffstat (limited to 'java.mvn.mk')
-rw-r--r--java.mvn.mk59
1 files changed, 59 insertions, 0 deletions
diff --git a/java.mvn.mk b/java.mvn.mk
new file mode 100644
index 0000000..45b7135
--- /dev/null
+++ b/java.mvn.mk
@@ -0,0 +1,59 @@
+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
+
+JC = JAVA_VERSION=${JAVA_VERSION} javac
+MVN = mvn
+JAVA = JAVA_VERSION=${JAVA_VERSION} java -classpath `cat .classpath`
+JDB = jdb
+BUILD_DIR = target
+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'
+DBG_PORT = 1044
+DBG_FLAGS = -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${DBG_PORT}
+
+all: ${OBJ}
+
+run: .classpath .main-class
+ ${JAVA} `cat .main-class` ${ARGS}
+
+debug: .classpath .main-class
+ ${JAVA} ${DBG_FLAGS} `cat .main-class` ${ARGS}
+
+debugger:
+ ${JDB} -sourcepath ${SRC_PATH} -attach ${DBG_PORT}
+
+.main-class:
+ @echo ${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}
+ 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' >> $@
+
+clean:
+ @rm -rf ${BUILD_DIR}
+
+buildmk:
+ @for i in `find src -name *.java`; do \
+ echo -n $$i | sed -E 's/^src\/main\/java(.*).java/target\/classes\1\.class: /g' | sed -E 's/^src\/test\/java(.*).java/target\/test-classes\1\.class: /g'; \
+ echo $$i; \
+ echo -n ' $${JC} -classpath `cat .classpath` '; \
+ echo $$i; \
+ echo ' mkdir -p `dirname $$@`'; \
+ echo -n ' mv ';\
+ echo $$i | sed 's/\.java$$/.class $$@/g'; \
+ echo ''; \
+ done > objs.mk
+
+.tags:
+ exctags -Rnf $@