使用包的非强制性生成文件java



所以我正试图为我的树莓派(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:

当我执行使运行时,我得到以下错误:

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

我几乎尽了一切努力让它运行,我确信java文件没有任何问题。任何人知道如何解决这个问题,请现在告诉我。

提前感谢!

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

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

相反。

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

编辑

依赖关系不太正确,您可能想要一个清单来告诉jar要运行什么类。像这样的东西应该起作用:

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:

最新更新