Makefile,main函数,ClassNotFound
我有一个Java程序,并编写了一个makefile在Linux上编译它 我的项目是这样组织的(Run.java是主要条目) 这是我的生成文件:Makefile,main函数,ClassNotFound,makefile,classnotfound,Makefile,Classnotfound,我有一个Java程序,并编写了一个makefile在Linux上编译它 我的项目是这样组织的(Run.java是主要条目) 这是我的生成文件: # My project require 3 parameters from user input. default: Run.class Run.class: src/adb/Bing_WebResults/Run.java javac -sourcepath src/ -classpath lib/*.jar -d bin/ src/adb
# My project require 3 parameters from user input.
default: Run.class
Run.class: src/adb/Bing_WebResults/Run.java
javac -sourcepath src/ -classpath lib/*.jar -d bin/ src/adb/Bing_WebResults/*.java src/adb/jsonModels/*.java src/adb/models/*.java
run:
java -classpath bin/:lib/*.jar Run "$(ARG1)" "$(ARG2)" "$(ARG3)"
当我在Linux中使用“makerun”命令terminate时,异常显示“找不到主类:run”
我的makefile有什么问题吗?错误的路径还是什么?有许多事情可能是错误的,但最明显的问题是makefile中目标的不正确依赖关系 首先,目标
run
应该依赖于run.class
。如果执行make run
,则make
查看名为run
的目标。在makefile
中,此目标没有定义任何依赖项,它将执行行java…
,而不检查实际编译的类Run.class
是否存在。因此,如果在干净的情况下执行make run
,则源代码将不会被编译,并且java
命令将失败,因为编译的类丢失
您对Run.class
的default
依赖关系也不正确,因为Run.class
将存在于bin
目录中,而不是工作目录中。下面这行还提到了目标Run.class
有几种方法可以改进makefile。请参阅下面的示例,其中添加了一些变量以避免重复表达式。不过,这种方法是风格和偏好的问题
BINDIR := bin
RUNCLASS := Run
RUNBINARY := $(BINDIR)/$(RUNCLASS).class
SRCDIR := src/adb/Bing_WebResults
RUNSRC := $(SRCDIR)/$(RUNCLASS).java
# Note: the default target below is superfluous at this moment
default: $(RUNBINARY)
$(RUNBINARY): $(RUNSRC)
javac -sourcepath src/ -classpath lib/*.jar -d $(BINDIR) $(SRCDIR)/*.java src/adb/jsonModels/*.java src/adb/models/*.java
run: $(RUNBINARY)
java -classpath $(BINDIR):lib/*.jar $(RUNCLASS) "$(ARG1)" "$(ARG2)" "$(ARG3)"
这在一个简化的、可比较的设置中对我有效——它可能也适用于您。查看您提供的代码片段,很可能需要添加其他依赖项或更改,以正确完成makefile
。可能需要将包信息添加到run命令和依赖项表达式中,但这取决于源代码。您的帖子包含的信息不足,无法提供完整的解决方案
注意:如果您将此代码复制到自己的
makefile
中,请不要忘记用制表符替换空格。最后,您需要在运行时指定包,因为默认包中似乎没有主类
java -classpath bin com.example.Run arg1 arg2 ...
事实证明,有两点需要注意: (1) Run在一个包中,所以在makefile中应该是“adb.Bing_WebResults.Run.class”
(2) 外部jar文件应该通过以下方式连接:(例如lib/a.jar:lib/b.jar)很好,您发现了这些错误。但是,您的makefile仍然需要更正。例如,如果您多次执行
make
,您的代码将被编译多次,对吗?
java -classpath bin com.example.Run arg1 arg2 ...