为了上大学,我必须使用Java。但是,我不想使用 IDE。我喜欢 vim。
所以我尝试创建一个 Makefile 来构建我的 java 项目。我的要求是:
没有类的硬编码。 Makefile 将查找
.java
目录和任何子目录中的所有 src
文件,并将生成的类编译到 classes
目录。
多个
mains
:包含 main
函数的文件应具有使用相应 .jar
构建的可执行 MANIFEST.MF
文件。明确列出它们是可以接受的,尽管我很确定可以使用 grep
在这里自动找到它们(但我很糟糕 grep
)
应创建整个项目的源jar,其中包含未更改的
.java
文件,并且没有MANIFEST.MF
或其他无关文件。
迄今为止我最好的尝试(目前已失败)如下:
include gmsl
targets := Client Server
# Folders
binDir := ./bin
clsDir := ./classes
srcDir := ./src
testDir := ./test
# Flags
version := 11
# Files
mainSrc := $(targets:%=$(srcDir)/tp1/%.java)
src := $(shell find $(srcDir) -name *\.java -type f)
cls := $(src:%.java=%.class)
# Rules
# Base
all : $(targets)
again : clean all
classes : $(cls)
# For debug
info:
$(info mainSrc : $(mainSrc))
$(info srcJar : $(srcJar))
$(info exeJar : $(exeJar))
$(info src : $(src))
$(info cls : $(cls))
# Executables
$(targets): $(cls)
$(shell cd $(srcDir))
$(eval mainCls := $(shell find . -name *$@\.java -type f) )
$(info mainCls = $(mainCls))
jar --verbose --create --file=$(call lc,$@)-exe.jar --main-class=tp1/$@ -C $(clsDir) .
# Source
$(srcJar) : $(cls)
jar --verbose --create --file=$@ --no-manifest -C $(srcDir) .
# Classes
$(cls):
javac --release $(version) --source-path $(srcDir) -d $(clsDir) $(mainSrc)
# Cleanup
clean:
-rm $(targets)
-cd $(clsDir) && rm -rf ./*
简短回答:选择非 IDE 解决方案是可以的。然而,将自己限制为“make”作为唯一的构建工具,对于任何重要的项目来说,很可能会导致以下两个结果之一:
还有什么替代方案吗?使用“理解”Java 的工具,并且具有适当的内置操作来构建 Java 工件:
从技术上讲,您可以构建一个 Makefile 来为您执行 ant/build。
compile:
mvn build
clean:
mvn clean
...