如何指出javac编译类应该去哪里?

Hul*_*ulk 3 java javac

我正在编译我的源文件,如下所示:

/home/bob/java/jdk1.5.0_06/bin/javac /home/bob/output/a.java
Run Code Online (Sandbox Code Playgroud)

如何更改此命令行以生成类文件/home/bob/class

此外,如何为此设置环境变量(如JAVA_HOME,CLASSPATH,JAVAPATH)?

Pab*_*ruz 6

您可以使用-d标志指定输出目录:

$ javac -d /home/bob/class /home/bob/output/a.java
Run Code Online (Sandbox Code Playgroud)

有关java编译器(javac)选项的完整列表,请检查链接.


vkr*_*mer 6

有很多方法可以让javac创建一个类文件/home/bob/class/a.class.

有两个组件可以交互以确定生成javac的输出:

"目标目录"的值,由-d选项设置.

该类在a.java'中定义的包属于'.这是由java源文件中的package语句设置的.

下面是一个可能的值表,可以为您提供所需的结果,并附有一些注释

destination directory (-d) |  package declaration |           comments
 /home/bob/classes         |       not set        | you probably have this
 /home/bob                 |       classes        | not recommended. See note 1.
 /home                     |     bob.classes      | not recommended.
 /                         |   home.bob.classes   | not recommended.

注1:虽然可以在包声明中添加任何值,但不建议这样做.建议的做法是使源文件的布局模仿类的包结构,相对于某些'package root'目录

这里有些例子:

package declaration |   package root   | recommended path of source file
     z              | /home/b/project1 |   /home/b/project1/z/MyClass.java
    y.z             | /home/b/project1 |   /home/b/project1/y/z/MyClass.java

您引用的环境变量每个都有一个特定的"作业",当您了解有关Java开发的更多信息时,它可能对执行某些任务很有用.

CLASSPATH:假定为包根的文件夹/ jar文件列表,用于查找代码所依赖的类文件.javac使用它将你的dot-java文件转换为点类文件,并由java用来运行你的java类/程序.如果使用javac/java的-classpath选项,则忽略此变量.

JAVAPATH:假定为包根的文件夹/ jar文件列表,用于查找代码所依赖的java源文件.这是由javac命令使用的.如果使用javac的-sourcepath选项,则忽略此变量.

JAVA_HOME:这是你的java安装的根目录.在你的问题中,/ home/bob/java/jdk1.5.0_06是JAVA_HOME.此变量通常由Java语言实现的程序使用.像javac和java这样的工具不使用JAVA_HOME,因为它们可以在执行时计算它.大多数时候,人们在他们项目的shell脚本中使用JAVA_HOME来启动他们的程序.

我不鼓励你使用你引用的环境变量.我已经做了大约10年的java编程,很少设置它们.我倾向于使用命令行选项.为什么?因为很容易忘记你的变量设置是什么,并最终导致你认为正在发生的事情,而不是.