心如止水: Java 编译:概念和实现



心如止水: Java 编译:概念和实现

  • 类路径,编译器从其中解析库类。编译器类路径通常由一个有序的文件系统目录列表和一些归档文件(JAR 或 ZIP 文件)组成,归档文件中包含先前编译过的 .class 文件。类路径由一个 JavaFileManager 实现,后者管理多个源代码和类 JavaFileObject 实例以及传递给JavaFileManager 构造函数的 ClassLoader。JavaFileObject 是一个 FileObject,专门处理以下任一种由编译器使用的JavaFileObject.Kind 枚举类型:

  1. SOURCE
  1. CLASS
  2. HTML
  3. OTHER
   每个源文件提供一个 openInputStream() 方法,可以作为 InputStream访问源代码。
  • javac 选项,以 Iterable<String> 的形式传递

  • 源文件 — 待编译的一个或多个 .java 源文件。JavaFileManager 提供了一个抽象的文件系统,可以将源文件和输出文件的文件名映射到JavaFileObject 实例(其中,文件 表示一个惟一名称和一串字节之间的关联。客户机不需要使用实际的文件系统)。在本文的示例中,JavaFileManager 管理类名与 CharSequence 实例之间的映射,后者包含待编译的 Java 源代码。JavaFileManager.Location包含一个文件名和一个标记,该标记可以表明该位置是源代码还是一个输出位置。 ForwardingJavaFileManager 实现 Chain of Responsibility 模式(参见 参考资料),允许将文件管理器链接在一起,就像类路径和源路径将 JAR 和目录链接起来一样。如果在这条链的第一个元素中没有发现 Java 类,那么将对链中的其他元素进行查找。

  • 输出目录,编译器在其中编写生成的 .class 文件。作为输出类文件的集合,JavaFileManager 也保存表示编译过的 CLASS 文件的JavaFileObject 实例。

  • 编译器。JavaCompiler 创建 JavaCompiler.CompilationTask 对象,后者从 JavaFileManager 中的 JavaFileObject SOURCE对象编译源代码,创建新的输出 JavaFileObject CLASS 文件和 Diagnostic(警告和错误)。静态ToolProvider.getSystemJavaCompiler() 方法返回编译器实例。

  • 编译器警告和错误,这些内容通过 Diagnostic 和 DiagnosticListener 实现。Diagnostic 是编译器发出的警告或编译错误。Diagnostic 指定以下内容:
  1. Kind(ERROR、WARNING、MANDATORY_WARNING、NOTE 或 OTHER)
  2. 源代码中的位置(包括行号和列号)
  3. 消息
   客户机向编译器提供一个 DiagnosticListener,编译器可通过它向客户机发回诊断信息。DiagnosticCollector 是一个简单的DiagnosticListener 实现。


Read full article from 心如止水: Java 编译:概念和实现


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts