我正在编写一个makefile,该makefile在另一个目录中编译.java
文件,然后我希望在不更改目录的情况下运行它。我想按照以下方式做一些事情:
$(SQM_JAVA_TOOL_DONE) : $(SQM_JAVA_TOOL)
$(shell cd /home_dir)
javac myjavafile.java
java myjavafile
其中Java文件为/home/myjavafile.java
,并且makefile不在/home
中运行。
我该怎么做?
我可能会误解这个问题,但是您可以使用
javac /home/MyJavaFile.java
这将在MyJavaFile.class
中创建/home
然后您可以通过在类路径中包含/home
来运行它。例如
java -cp /home MyJavaFile
如果要在另一个目录中生成类文件,则可以对-d
使用javac
选项。
将-d
命令行参数与javac
一起使用,告诉它要将编译的类文件存储在哪个目录中。然后,要运行该程序,只需将该目录包括在类路径中:
javac -d some/directory myjavafile.java
java -cp some/directory myjavafile
只需添加到现有答案中,您可能需要--source-path
标志:
--source-path <path>, -sourcepath <path> Specify where to find input source files
[我相信这有效地设置了要从其编译的包根javac
(即<path>
将从文件的预期包名称中剥离)。仍然需要枚举要编译的文件,并且它仍应相对于当前工作目录,即not传递给--source-path
的路径。
例如,要从源代码存储在src/
中并且要在bin/
中构建的项目的根目录进行编译和运行,>
$ javac --source-path src -d bin src/mypackage/*.java $ java -cp bin mypackage.Main
甚至在文件系统其他位置的目录中也可以使用,例如:
$ javac --source-path /some/absolute/path/src -d /some/absolute/path/bin /some/absolute/path/
$ java -cp /some/absolute/path/bin mypackage.Main