
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 xyooyx 2023-06-09 22:02:08 +08:00 via iPhone idea 不是可以加载多环境吗。。 |