jdk8(包含)之前的,把 javac 代码拷出来 放到 idea 中,打开就能跑起来了,
但是 jdk9 (包含)之后,由于模块化,就跑不起来了,各种错误。
网上的所有资料都是 java8 之前的,包含 2023 新写的文章,都是 java8, 感觉就是相互抄过去抄过来,完全找不到有价值的信息。英文资料虽然没有垃圾信息,但是也没有任何相关的新。
1
jamezee 2023-06-09 10:38:50 +08:00
深入理解 Java 虚拟机(第三版)里有写
|
2
passer9527 OP @jamezee 里面用的是 java8 的,不是我要的
|
3
jamezee 2023-06-09 10:49:34 +08:00
@passer9527 第三版是 openjdk12 ,你说的是第二版吧
|
4
passer9527 OP @jamezee 说的就是第三版,我说的是单独运行 javac ,不是 调试整个 jvm
|
5
c2const 2023-06-09 11:03:35 +08:00
之前接触过一个 java 项目,jdk11 的,JavaCompiler jc = ToolProvider.getSystemJavaCompiler(); ....
可以直接编译 java 源码到 class 文件。 那项目还打包 AOT 编译到二进制了。 |
6
DsuineGP 2023-06-09 11:13:31 +08:00
看起来 jdk11 的 javac 还依赖了 $JAVA_HOME/lib/jli 这个动态库, 你拷贝的时候把这个库也一起带着, 保持相对的路径就行
---- Load command 18 cmd LC_RPATH cmdsize 40 path @loader_path/../lib/jli (offset 12) |
7
zhady009 2023-06-09 12:35:10 +08:00 via iPhone
啥报错信息都没 猜
|
8
sunxiaping521 2023-06-09 12:43:20 +08:00
为什么不直接用 JDK 11 ?
|
9
siweipancc 2023-06-09 13:46:59 +08:00 via iPhone
……你是单独执行 class 文件?
|
10
passer9527 OP @siweipancc 单独运行 javac 源码
|
11
passer9527 OP 自己折腾了一天,搞定了,确实没有搜到资料,靠自己从根源出发,推理下流程,然后用了些小 trick ,完美调试。
java17 的 javac 有 10 万行。 $ cloc src 406 text files. 405 unique files. 4 files ignored. 1 error: Line count, exceeded timeout: src/com/sun/tools/javac/tree/Pretty.java github.com/AlDanial/cloc v 1.94 T=1.70 s (237.7 files/s, 106246.2 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Java 390 18078 45625 105495 Properties 15 3092 2912 5833 ------------------------------------------------------------------------------- SUM: 405 21170 48537 111328 ------------------------------------------------------------------------------- |
12
siweipancc 2023-06-09 19:22:03 +08:00 via iPhone
@passer9527 (;´༎ຶД༎ຶ`)为什么要这么做,你换个 maven 啊,然后看看 maven trace compile
|
13
lqw3030 2023-06-09 22:02:08 +08:00 via iPhone
idea 不是可以加载多环境吗。。
|