使用工具编译.java文件
public static void compileModifiedFiles(List<String> modifiedFiles, String srcRootPath, String classRootPath) {
File classRoot = new File(classRootPath);
if (!classRoot.exists()) {
classRoot.mkdir();
}
String sbUrls = System.getProperty("java.class.path");
String[] arg = new String[] { "-encoding", COMP_CHARSET, "-d", classRootPath, "-sourcepath", srcRootPath, "-cp", sbUrls.toString(),
"" };
for (String modifiedFile : modifiedFiles) {
if (null == modifiedFile || 0 == modifiedFile.length()) {
continue;
}
// 每次编译前判断该类是否已经编译过了(在其它类中有引用,则会提前编译)
//利用.class文件肯定是在.java文件之后才生成
String classFile = classRootPath + modifiedFile.substring(srcRootPath.length(), modifiedFile.length() - 5) + ".class";
if (new File(modifiedFile).lastModified() < new File(classFile).lastModified()) {
// 已经编译过,跳过
continue;
}
arg[8] = modifiedFile;
System.out.println("compiling file : " + modifiedFile);
int status = Main.compile(arg);
if (status != 0) {
throw new RuntimeException("error!");
}
}
}
分享到:
相关推荐
- **代码生成**:最后,javac 生成字节码,每个方法对应一个 `.class` 文件中的方法部分,同时生成常量池、类信息等。 2. **源码结构**: - `com.sun.tools.javac` 包是 javac 源码的主要组织结构,包含了编译器...
在Java编程语言中,`javac`和`java`命令是开发者日常工作中不可或缺的工具,它们分别用于编译和运行Java程序。在这个主题中,我们将深入探讨如何在含有包名的情况下使用`javac`命令,并理解`classpath`的重要性。...
- **集成开发环境(IDE)**:虽然使用命令行编译Java程序是一个很好的学习过程,但在实际开发中,大多数开发者会选择使用集成开发环境(IDE),如Eclipse、IntelliJ IDEA等。这些工具不仅简化了编译过程,还提供了诸如...
在深入理解javac源码的过程中,我们可以更好地了解Java语言的编译原理,以及Java平台如何实现跨平台的执行。 源码分析: 1. **词法分析**:javac首先进行词法分析,将源代码分割成一个个的词法单元(如标识符、...
在开发Java应用程序时,开发者可能会遇到“javac不是内部或外部命令”的错误提示。这种情况通常发生在刚刚安装完Java Development Kit (JDK) 并尝试编译Java代码时。为了解决这个问题,正确配置Java环境变量至关重要...
Java 与 javac 命令详解 Java 和 javac 命令是 Java 语言的基本组成部分,它们在 Java ...通过这些例子,我们可以看到 Java 和 javac 命令的使用方法和规则,以及它们在 Java 应用程序的编译和执行过程中的重要作用。
5. 优化(Optimization):在生成字节码的过程中,javac可能会进行一些简单的优化,如常量折叠、死代码消除等,以提高程序运行效率。 二、javac的关键组件 1. 词法分析器(Lexer):负责将源代码分割成一个个词法...
- 在Eclipse中,创建一个新的Java项目,将javac源码导入到项目中。 - 配置项目的构建路径,确保包含所有必要的JDK库和依赖项。 - 使用Eclipse的调试功能,可以设置断点、单步执行,观察javac编译过程中的内部状态...
例如,在上面的示例程序中,使用javac命令编译HelloWorld.java文件,生成了HelloWorld.class文件。 运行Java程序 在编译Java程序后,需要使用Java虚拟机运行Java程序。Java虚拟机将加载相关的类,然后调用主程序类...
在Java编程中,“javac”是Java语言的编译器,它是Java开发工具包(JDK)的一部分,用于将源代码编译成可执行的字节码。本知识系列将深入探讨“javac”的内部工作机制,帮助开发者更好地理解和优化自己的代码。 ...
你也可以尝试在命令行中使用`where javac`来查找系统中已安装的所有`javac`位置,这有助于确认是否正确安装了JDK。 此外,`捕获.PNG`文件名可能暗示这是一个屏幕截图,通常用于显示错误消息或配置界面。尽管这个...
总的来说,虽然从"jdk9_javac.rar"解压的javac编译器可能在使用时遇到包冲突,但通过正确配置模块路径、使用模块化特性,以及了解和利用JDK9的新功能,我们可以充分利用这个编译器进行本地编译和调试。理解并掌握...
6. **异常表和属性表构建**:在生成的字节码中,会包含异常表和属性表,它们分别记录了异常处理规则和类或方法的其他元数据。 7. **类文件输出**:最后,编译器将生成的字节码写入到对应的`.class`文件中,每个...
Java 编译器,简称 `javac`,是 Java 语言的核心组成部分,它负责将开发者编写的源代码(.java 文件)转换成可执行的字节码(.class 文件),这是 Java 应用程序能够运行的基础。`javac.jar` 是 OpenJDK 中 `javac` ...
3. **语义分析**:在语法正确的前提下,javac 对 AST 进行深度遍历,进行类型检查、变量声明和方法定义的验证,以及类的加载和链接。这部分涉及 `Symbol` 和 `Types` 包中的多个类,它们负责处理符号表和类型信息。 ...
3. **源码增强**:在 JDK 9 中,javac 支持更多的语言特性,例如私有接口方法(private interface methods)、局部变量类型推断(Local Variable Type Inference,即 var 关键字)等。这些新特性使得代码更加简洁且...
同时,由于提到了`javac`,所以笔记中很可能对如何使用这个编译器进行了详细的解释,比如它的基本用法、编译选项、处理编译错误以及如何构建和运行Java应用程序。 【标签】中的“Java笔记”暗示了这是一份详尽的...
然后,在命令提示符中,输入 javac 命令,例如:javac area.java,编译完成后,输入 java 命令,例如:java area,运行程序,每正常的话就可以看到结果了。 Java 软件的安装和运行程序的方法需要掌握 Java 软件的...
当你尝试在命令行中使用javac命令来编译Java源代码时,如果系统弹出“'javac'不是内部或外部命令,也不是可运行的程序或批处理文件”这样的错误信息,这表明你的计算机系统尚未找到javac可执行文件的位置。...
在Java编程过程中,我们通常会使用到javac命令来编译Java源代码。对于初学者或者习惯于使用集成开发环境(IDE)的人来说,了解如何手动使用这些命令非常有必要。 **1. javac命令基本介绍** javac是Java编译器,...