- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在这样编译我的源文件:
/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 的输出:
'目标目录'的值,由 -d 选项设置。
a.java 中定义的类“属于”的包。这由您的 java 源文件中的包语句设置。
这是一个可能的值表,可以让你得到你正在寻找的结果,并附有一些关于它们的注释
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 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 使用它来将您的点 java 文件转换为点类文件,并且 java 使用它来运行您的 java 类/程序。如果您使用 javac/java 的 -classpath 选项,该变量将被忽略。
JAVAPATH:文件夹/jar 文件的列表,这些文件夹/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 来启动他们的程序。
我不鼓励您使用您引用的环境变量。我做java编程大概有10年了,很少设置。我倾向于使用命令行选项。为什么?因为很容易忘记您的变量设置是什么,并最终出现您认为正在发生的情况,实际上并没有发生。
关于java - 如何为 javac 指示编译类应该去哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487001/
我的问题是关于基本的java命令之一“javac”。我的桌面上有一个“.java”文件。我已经安装了 JDK 7 并将路径变量添加到环境变量中。这是“环境变量”的屏幕截图。 http://s13.po
我制作了我的 gitrepository 并提交了它。 插入了一个 java 文件并想编译它,但它给了我这个: Bernard@BERNARD-PC /c/users/bernard/desktop/
运行Maven时,得到以下输出: [WARNING] Unable to autodetect 'javac' path, using 'javac' from the environment. 我该
我有一个导入一些 servlet 库的类。当我从命令行编译它时它很好。 当我使用 ant compile 任务编译它时,它给出了在其路径中找不到 servlet 库的错误。 这是已知/常见的情况吗?
我试图在 maven-compiler-plugin 中指定另一个版本的 JDK .当-target和 -source参数设置为1.5,一切正常。但是当我尝试使用 1.6 JDK 时,maven 会报
我们的软件之前附带 OpenJDK JRE,但现在我们将附带 Oracle JRE。 之前我们使用 OpenJDK javac 编译器进行编译。我认为现在我们应该使用 Oracle javac 编译器
在大多数现代 IDE 中,您可以设置一个参数来确保 javac 获得足够的堆内存来进行编译。由于不值得在这里讨论的原因,我们暂时与 JBuilder 2005/2006 联系在一起,而且源代码的数量似
我在桌面上的 Notepad++ 中保存了一个名为“first.java”的文件。当我运行 cmd 命令“javac first.java”时,它给了我这个错误。 javac: file not fo
更新: See resolution here. 感谢大家的帮助! 我在尝试使用 Ant 编译项目时遇到错误,它声称“[javac] javac:无效目标版本:7”并导致构建失败。 我在 Mac OS
当我尝试在我的 gwt-maven Projekt 上进行 maven-install 时,我得到了这个错误: [ERROR] Failed to execute goal org.apache.ma
使用 maven 编译时出现编译错误。 [ERROR] COMPILATION ERROR : [INFO] ---------------------------------------------
我正在查看一些内部 javac sun 编译器 API 源代码,并在 Types 类中发现了这一点: public Boolean visitTypeVar(TypeVar var1, Type va
我正在尝试运行 java 应用程序,但出现以下错误, Unable to find a javac compiler; com.sun.tools.javac.Main is not on the c
我有这个类,它是我在从 Java 6 移植到 Java 8 的项目中找到的一些代码的简化: public class Unification { final class Box {}
首先,我要感谢你,并明确地说,我已经在这个问题上苦苦思索了好几天,并在其他类似线程中寻找解决方案,但没有成功。 我们的应用程序负责生成 java 类,其中一些可能在类名(因此文件名)中包含特殊字符,例
以下代码创建了一个Collector,它产生了一个UnmodifiableSortedSet: package com.stackoverflow; import java.util.Collecti
当我用 Maven 编译我的类时遇到问题。堆栈跟踪如下所示: [ERROR] Failure executing javac, but could not parse the error: [ERRO
这个问题在这里已经有了答案: Why Java compiler as distributed as executable and not as JVM bytecode? (1 个回答) 关闭 7
我有一些用 javac 1.8.0_92 编译的代码: public final class Either { // ... private final L l; privat
这个问题在这里已经有了答案: Lombok's access to jdk.compiler's internal packages incompatible with Java-16 (3 个回答)
我是一名优秀的程序员,十分优秀!