如何在另一个目录中编译和运行Java类?

问题描述 投票:30回答:3

我正在编写一个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中运行。

我该怎么做?

java javac
3个回答
39
投票

我可能会误解这个问题,但是您可以使用

javac /home/MyJavaFile.java

这将在MyJavaFile.class中创建/home

然后您可以通过在类路径中包含/home来运行它。例如

java -cp /home MyJavaFile

如果要在另一个目录中生成类文件,则可以对-d使用javac选项。


35
投票

-d命令行参数与javac一起使用,告诉它要将编译的类文件存储在哪个目录中。然后,要运行该程序,只需将该目录包括在类路径中:

javac -d some/directory myjavafile.java
java -cp some/directory myjavafile

0
投票

只需添加到现有答案中,您可能需要--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
© www.soinside.com 2019 - 2024. All rights reserved.