3

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

/home/bob/java/jdk1.5.0_06/bin/javac /home/bob/output/a.java

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

此外,应该如何设置环境变量(如 JAVA_HOME、CLASSPATH、JAVAPATH)才能使其正常工作?

4

3 回答 3

6

有很多方法可以让 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:假定为包根的文件夹/ja​​r 文件列表,用于查找代码所依赖的类文件。javac 使用它来将您的 dot-java 文件转换为 dot-class 文件,并且 java 使用它来运行您的 java 类/程序。如果使用 javac/java 的 -classpath 选项,则忽略此变量。

JAVAPATH:假定为包根的文件夹/ja​​r 文件列表,用于查找代码所依赖的 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 编程,并且很少设置它们。我倾向于使用命令行选项。为什么?因为很容易忘记您的变量设置是什么,并最终陷入您认为正在发生的情况,但事实并非如此。

于 2010-03-21T14:48:37.110 回答
6

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

$ javac -d /home/bob/class /home/bob/output/a.java

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

于 2010-03-21T12:17:12.580 回答
4
javac -d /home/bob/class Test.java

将你生成的class文件放到指定目录

/home/bob/class/Test.class

而对于其他标志,您需要设置环境变量。检查这个

于 2010-03-21T12:19:45.373 回答