V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
passer9527
V2EX  ›  Java

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

  •  
  •   passer9527 · 2023-06-09 10:14:33 +08:00 · 1859 次点击
    这是一个创建于 534 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    13 条回复    2023-06-09 22:02:08 +08:00
    jamezee
        1
    jamezee  
       2023-06-09 10:38:50 +08:00
    深入理解 Java 虚拟机(第三版)里有写
    passer9527
        2
    passer9527  
    OP
       2023-06-09 10:46:47 +08:00
    @jamezee 里面用的是 java8 的,不是我要的
    jamezee
        3
    jamezee  
       2023-06-09 10:49:34 +08:00
    @passer9527 第三版是 openjdk12 ,你说的是第二版吧
    passer9527
        4
    passer9527  
    OP
       2023-06-09 10:50:56 +08:00
    @jamezee 说的就是第三版,我说的是单独运行 javac ,不是 调试整个 jvm
    c2const
        5
    c2const  
       2023-06-09 11:03:35 +08:00
    之前接触过一个 java 项目,jdk11 的,JavaCompiler jc = ToolProvider.getSystemJavaCompiler(); ....
    可以直接编译 java 源码到 class 文件。
    那项目还打包 AOT 编译到二进制了。
    DsuineGP
        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)
    zhady009
        7
    zhady009  
       2023-06-09 12:35:10 +08:00 via iPhone
    啥报错信息都没 猜
    sunxiaping521
        8
    sunxiaping521  
       2023-06-09 12:43:20 +08:00
    为什么不直接用 JDK 11 ?
    siweipancc
        9
    siweipancc  
       2023-06-09 13:46:59 +08:00 via iPhone
    ……你是单独执行 class 文件?
    passer9527
        10
    passer9527  
    OP
       2023-06-09 14:53:15 +08:00
    @siweipancc 单独运行 javac 源码
    passer9527
        11
    passer9527  
    OP
       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
        12
    siweipancc  
       2023-06-09 19:22:03 +08:00 via iPhone
    @passer9527 (;´༎ຶД༎ຶ`)为什么要这么做,你换个 maven 啊,然后看看 maven trace compile
    lqw3030
        13
    lqw3030  
       2023-06-09 22:02:08 +08:00 via iPhone
    idea 不是可以加载多环境吗。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2658 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:51 · PVG 13:51 · LAX 21:51 · JFK 00:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.