【问题标题】:Makefile java with package depandancy具有包依赖关系的 Makefile java
【发布时间】:2023-04-06 23:10:01
【问题描述】:

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

当我执行 ma​​ke run 时,我收到以下错误:

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

我尝试了几乎所有方法来让它运行,并且我确信 java 文件没有任何问题。 任何人都知道如何解决此问题,请现在告诉我。

提前致谢!

【问题讨论】:

  • 如果是罐子,你应该使用java -jar myJar.jar启动它
  • 所以它确实是 -jar,但现在我得到下一个错误:无法访问 jarfile helloPi
  • 那你的路径一定不正确

标签: java jar makefile


【解决方案1】:

假设您的 jar 中有一个 main 方法,您的直接问题似乎是您没有启动实际的 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:

【讨论】:

  • 所以它确实是-jar,但现在我得到下一个错误:无法访问 jarfile helloPi
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多