背景
- 了解java 编译过程
- 使用java的module调用javac
java的编译命令
在java jdk9 开始,拥有了module
系统 ,jdk里面内部的库也拆分成为不同的module
java的编译前端命令是javac
,实际上调用的是jdk.compiler
这个module下面的类com.sun.tools.javac.Main
也就是说javac
这个命令和 java --module jdk.compiler/com.sun.tools.javac.Main
这个命令是一致的
java前端
列出所有的module
$ java --list-modules
...
jdk.attach@17.0.5
jdk.charsets@17.0.5
jdk.compiler@17.0.5
...
我的jdk现在是jdk17 , 可以看到其中有一个jdk.compiler
的module , 这个就是java编译器前端
使用module 方式调用
先创建一个hello world
vim com/Hello.java
内容如下:
package com;
public class Hello{
public static void main(String [] argc){
System.out.print(argc.length);
}
}
然后使用以下命令编译:
java --module jdk.compiler/com.sun.tools.javac.Main com/Hello.java
获取class 文件:
$tree com
com
├── Hello.class
└── Hello.java
执行这个hello world
的demo:
$ java com.Hello
0
正常执行