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:
所以我正在尝试为我的 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: