Makefile java 具有包依赖性

Makefile java with package depandancy

所以我正在尝试为我的 raspberry pi (w. raspbian) 制作一个 makefile,但它不能很好地处理依赖关系

JFLAGS = -classpath .:/usr/share/java/'*' -d .
JC = javac
JVM = java

.java.class:
    $(JC) $(JFLAGS) $<

.class.jar:
    jar cvf $@ $^

SRC = \
    helloPi.java\
    Commands.java

MAIN = helloPi

default: $(MAIN).jar

CLASSES = $(SRC:.java=.class)

run: $(MAIN).jar
     $(JVM) $(MAIN)

clean:
    rm *.class

helloPi.jar: $(CLASSES)

helloPi.class: Commands.class
Commands.class:

当我执行 make 运行 时,出现以下错误:

 java helloPi
 Error: Could not find or load main class helloPi
 makefile:22: recipe for target 'run' failed
 make: *** [run] Error 1

我几乎尝试了所有方法以将其添加到 运行,并且我确信 java 文件没有任何问题。 任何人都知道如何解决这个问题,现在请告诉我。

提前致谢!

假设您的 jar 中有一个 main 方法,您的直接问题似乎是您没有启动实际的 jar 文件。尝试:

run: $(MAIN).jar
     $(JVM) -jar $(MAIN).jar

相反。

我可能会通过将 MAIN 设置为 helloPi.jar 来进一步清理它,这样您就不必继续指定 .jar 部分,但这基本上是一个样式问题。

编辑

依赖关系不太正确,您可能需要一个清单来告诉 jar class 到 运行。这样的事情应该有效:

JFLAGS = -classpath .:/usr/share/java/'*' -d .
JC = javac
JVM = java -jar
JAR = jar cvfm

SRC = \
    helloPi.java\
    Commands.java

MAINCLASS = helloPi
MAINJAR = $(MAINCLASS).jar

default: $(MAINJAR)

run: $(MAINJAR)
    $(JVM) $(MAINJAR)

clean:
    rm *.class $(MAINJAR) MANIFEST.MF

CLASSES = $(SRC:.java=.class)

$(CLASSES): %.class: %.java
    $(JC) $(JFLAGS) $<

MANIFEST.MF:
    $(shell echo Main-Class: $(MAINCLASS) > MANIFEST.MF)

$(MAINJAR): $(CLASSES) MANIFEST.MF
    $(JAR) $(MAINJAR) MANIFEST.MF $(CLASSES)

helloPi.class: Commands.class
Commands.class: