如何在不同的目录中编译和运行Java类?

时间:2010-08-05 14:10:42

标签: java javac

我正在编写一个makefile,它在另一个目录中编译.java文件,然后我想运行它,而不更改目录。我想按照以下方式做点什么:

$(SQM_JAVA_TOOL_DONE) : $(SQM_JAVA_TOOL)
        $(shell cd /home_dir)
        javac myjavafile.java
        java myjavafile

其中Java文件为/home/myjavafile.java,并且makefile未从/home运行。

我该怎么做?

3 个答案:

答案 0 :(得分:37)

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

进行编译
javac /home/MyJavaFile.java

这将在MyJavaFile.class

中创建/home

然后,您可以通过在类路径中包含/home来运行它。 e.g。

java -cp /home MyJavaFile

如果要在其他目录中生成类文件,则可以使用-d选项javac

答案 1 :(得分:33)

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

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

答案 2 :(得分:1)

只需添加到现有答案中,您可能需要--source-path标志:

--source-path <path>, -sourcepath <path>
      Specify where to find input source files

我认为这有效地设置了软件包根javac将从其编译(即<path>将从文件的预期软件包名称中剥离)。仍然需要枚举要编译的文件,并且该文件仍应相对于当前工作目录,而不是相对于传递给--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