我正在编译我的源文件,如下所示:
/home/bob/java/jdk1.5.0_06/bin/javac /home/bob/output/a.java
如何更改此命令行以生成类文件/home/bob/class
?
此外,应该如何设置环境变量(如 JAVA_HOME、CLASSPATH、JAVAPATH)才能使其正常工作?
有很多方法可以让 javac 创建一个类文件 /home/bob/class/a.class。
有两个组件相互作用以确定 javac 的输出将在何处生成:
'destination directory' 的值,由 -d 选项设置。
a.java 中定义的类“所属”的包。这由您的 java 源文件中的 package 语句设置。
这是一个可能值的表格,这些值将为您提供您正在寻找的结果,并附有一些关于它们的注释
目标目录 (-d) | 包装声明 | 注释 /home/bob/类 | 未设置 | 你可能有这个 /家/鲍勃 | 课程 | 不建议。见注 1。 /主页 | bob.classes | 不建议。 / | home.bob.classes | 不建议。
注意 1:虽然可以在包声明中放置任何值,但不建议这样做。推荐的做法是让你的类的包结构被你的源文件的布局所模仿,相对于一些“包根”目录
这里有些例子:
包装声明 | 包根 | 推荐的源文件路径 z | /home/b/project1 | /home/b/project1/z/MyClass.java yz | /home/b/project1 | /home/b/project1/y/z/MyClass.java
您引用的每个环境变量都有一个特定的“工作”,当您了解有关 Java 开发的更多信息时,它可能对执行一些任务很有用。
CLASSPATH:假定为包根的文件夹/jar 文件列表,用于查找代码所依赖的类文件。javac 使用它来将您的 dot-java 文件转换为 dot-class 文件,并且 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 编程,并且很少设置它们。我倾向于使用命令行选项。为什么?因为很容易忘记您的变量设置是什么,并最终陷入您认为正在发生的情况,但事实并非如此。
您可以使用 -d 标志指定输出目录:
$ javac -d /home/bob/class /home/bob/output/a.java
有关 java 编译器 (javac) 选项的完整列表,请查看此链接。
javac -d /home/bob/class Test.java
将你生成的class文件放到指定目录
/home/bob/class/Test.class
而对于其他标志,您需要设置环境变量。检查这个