求问:怎么编译运行高版本的 javac

2023-06-09 10:14:33 +08:00
 passer9527

jdk8(包含)之前的,把 javac 代码拷出来 放到 idea 中,打开就能跑起来了,

但是 jdk9 (包含)之后,由于模块化,就跑不起来了,各种错误。

网上的所有资料都是 java8 之前的,包含 2023 新写的文章,都是 java8, 感觉就是相互抄过去抄过来,完全找不到有价值的信息。英文资料虽然没有垃圾信息,但是也没有任何相关的新。

1835 次点击
所在节点    Java
13 条回复
jamezee
2023-06-09 10:38:50 +08:00
深入理解 Java 虚拟机(第三版)里有写
passer9527
2023-06-09 10:46:47 +08:00
@jamezee 里面用的是 java8 的,不是我要的
jamezee
2023-06-09 10:49:34 +08:00
@passer9527 第三版是 openjdk12 ,你说的是第二版吧
passer9527
2023-06-09 10:50:56 +08:00
@jamezee 说的就是第三版,我说的是单独运行 javac ,不是 调试整个 jvm
c2const
2023-06-09 11:03:35 +08:00
之前接触过一个 java 项目,jdk11 的,JavaCompiler jc = ToolProvider.getSystemJavaCompiler(); ....
可以直接编译 java 源码到 class 文件。
那项目还打包 AOT 编译到二进制了。
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)
zhady009
2023-06-09 12:35:10 +08:00
啥报错信息都没 猜
sunxiaping521
2023-06-09 12:43:20 +08:00
为什么不直接用 JDK 11 ?
siweipancc
2023-06-09 13:46:59 +08:00
……你是单独执行 class 文件?
passer9527
2023-06-09 14:53:15 +08:00
@siweipancc 单独运行 javac 源码
passer9527
2023-06-09 18:21:18 +08:00
自己折腾了一天,搞定了,确实没有搜到资料,靠自己从根源出发,推理下流程,然后用了些小 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
-------------------------------------------------------------------------------
siweipancc
2023-06-09 19:22:03 +08:00
@passer9527 (;´༎ຶД༎ຶ`)为什么要这么做,你换个 maven 啊,然后看看 maven trace compile
lqw3030
2023-06-09 22:02:08 +08:00
idea 不是可以加载多环境吗。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/947197

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX