如何为javac指明编译的类应该去哪里?

如何为javac指明编译的类应该去哪里?,java,javac,Java,Javac,我正在编译源文件,如下所示: /home/bob/java/jdk1.5.0_06/bin/javac /home/bob/output/a.java 如何更改此命令行以在/home/bob/class中生成类文件 另外,应该如何设置环境变量(如JAVA_HOME、CLASSPATH、JAVAPATH)以使其工作?您可以使用-d标志指定输出目录: $ javac -d /home/bob/class /home/bob/output/a.java 有关java编译器(javac)选项的完整列

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

/home/bob/java/jdk1.5.0_06/bin/javac /home/bob/output/a.java
如何更改此命令行以在
/home/bob/class
中生成类文件


另外,应该如何设置环境变量(如JAVA_HOME、CLASSPATH、JAVAPATH)以使其工作?

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

$ javac -d /home/bob/class /home/bob/output/a.java
有关java编译器(javac)选项的完整列表,请查看链接

将把生成的类文件放到指定的目录中

/home/bob/class/Test.class

对于其他标志,您需要设置环境变量

有很多方法可以让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. 目标目录(-d)|包声明|注释 /home/bob/classes |未设置|您可能有这个 /不推荐在家/在家上课。见注1。 /家庭| bob.classes |不推荐。 /| home.bob.classes |不推荐。 注1:虽然可以在包声明中放入任何值,但不建议这样做。建议的做法是通过源文件的布局来模仿类的包结构,相对于某些“包根”目录

/home/bob/class/Test.class
以下是一些例子:

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 包声明|包根|源文件的建议路径 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使用它将点java文件转换为点类文件,java使用它运行java类/程序。如果使用javac/java的-classpath选项,则忽略此变量

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

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

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