我正在编译我的源文件,如下所示:
/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)?
您可以使用-d标志指定输出目录:
$ javac -d /home/bob/class /home/bob/output/a.java
Run Code Online (Sandbox Code Playgroud)
有关java编译器(javac)选项的完整列表,请检查此链接.
有很多方法可以让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编程,很少设置它们.我倾向于使用命令行选项.为什么?因为很容易忘记你的变量设置是什么,并最终导致你认为正在发生的事情,而不是.