• IntelliJ IDEA运行JDK 19-ea问题


    最近Java热门项目Loom进展很好,尝试本地运行下新功能,分享遇到的一些问题。

    IntelliJ IDEA使用的版本是:2021.3.2 (Ultimate Edition),Build #IU-213.6777.52, built on January 28, 2022。看着还挺新的,可惜还不够最新,后文会提到。

    首先按照如下步骤安装JDK 19最新的预览版本。关于Loom的更多信息:Loom Early-Access Builds

    下载JDK 19预览版,以Mac为例:

    💡 https://download.java.net/java/early_access/jdk19/28/GPL/openjdk-19-ea+28_macos-x64_bin.tar.gz

    下载完解压到相应位置,进入目录/Applications/jdk-19.jdk/Contents/Home/bin

    执行如下命令:

    1. tech@mymac bin % ./java --version
    2. openjdk 19-ea 2022-09-20
    3. OpenJDK Runtime Environment (build 19-ea+28-2110)
    4. OpenJDK 64-Bit Server VM (build 19-ea+28-2110, mixed mode, sharing)

    JDK 19安装没问题,接下来集成到Idea中,新建jdk_19项目。

    1.配置项目SDK

    添加刚安装的JDK成为Idea的SDK

    完成后选择这个SDK,Language level选择“X-Experimental”

    Modules中依赖SDK也需要配置

     写一个简单的测试代码试验下:

    1. package com.echx.jdk19;
    2. public class TestLoom {
    3. public static void main(String[] args) throws InterruptedException {
    4. System.out.println("Current jdk version:"+System.getProperty("java.version") );
    5. System.out.println("1-Run in main thread, Currrent ThreadName:"+Thread.currentThread().getName());
    6. Thread thread1 = Thread.ofVirtual().start(new Runnable() {
    7. @Override
    8. public void run() {
    9. System.out.println("Run in virtual thread, Currrent ThreadName:"+Thread.currentThread());
    10. }
    11. });
    12. System.out.println("2-Run in main thread, Currrent ThreadName:"+Thread.currentThread().getName());
    13. thread1.join();
    14. Thread thread = new Thread(new Runnable(){
    15. @Override
    16. public void run() {
    17. System.out.println("Run in classic thread, Currrent ThreadName:"+Thread.currentThread().getName());
    18. }
    19. });
    20. thread.start();
    21. thread.join();
    22. }
    23. }

    测试代码做的事情:起了一个Virtual Thread,打印当前线程信息,与普通线程做个对比。

    开始build,很不幸出现以下错误:

    1. java: ofVirtual() 是预览 API,默认情况下处于禁用状态。
    2. (请使用 --enable-preview 以启用预览 API)

    配置--enable-preview到编译环境

    再次不幸,出了以下错误提示: 

    1. java: 源发行版 18--enable-preview 一起使用时无效
    2. (仅发行版 19 支持预览语言功能)

    而这个错误最终导致了放弃在Idea中测试JDK 19的预览功能。

    经过漫长的网上漫游寻找解决方案,多种配置方式都无法解决这个错误,最终据说是只能更新到最新版Idea,在Compiler配置如下参数:-enable-preview --source 19

    切换到命令行,直接编译运行了。

    进入到该项目的src目录下。

    /Applications/jdk-19.jdk/Contents/Home/bin 是JDK 19-EA安装目录。

    编译:

    /Applications/jdk-19.jdk/Contents/Home/bin/javac --release 19 --enable-preview -Xlint:preview com/echx/jdk19/TestLoom.java
    

    注意加上参数:--release 19 --enable-preview

    有一个警告提示,可以忽略:

    com/echx/jdk19/TestLoom.java:8: 警告: [preview] ofVirtual() 是预览 API,可能会在未来发行版中删除。 Thread thread1 = Thread.ofVirtual().start(new Runnable() { ^ 1 个警告

    运行:

    /Applications/jdk-19.jdk/Contents/Home/bin/java --enable-preview com.echx.jdk19.TestLoom
    

    得到如下输出:

    1. Current jdk version:19-ea
    2. 1-Run in main thread, Currrent ThreadName:main
    3. 2-Run in main thread, Currrent ThreadName:main
    4. Run in virtual thread, Currrent ThreadName:VirtualThread[#21]/runnable@ForkJoinPool-1-worker-1
    5. Run in classic thread, Currrent ThreadName:Thread-0

    成功!可以看到Virtual Thread是在ForkJoinPool的一个实际线程中运行。

  • 相关阅读:
    双三次差值bicubic
    nodejs:path路径模块
    TCP服务器使用多路复用
    技术流 | 运维平台大型“生产事故”录播和实战重现
    gRPC简介
    springboot调用第三方接口json转换成对象
    关于我在uni-app练手中遇到的坑
    【第7篇】AI语音交互原理介绍
    【RTOS训练营】程序框架、预习、课后作业和晚课提问
    git撤回多个push到远程仓库的commit
  • 原文地址:https://blog.csdn.net/feng_zi0yhv/article/details/125559284