• 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的一个实际线程中运行。

  • 相关阅读:
    Facebook公共主页新版和经典版的切换以及注意事项
    艾美捷重组的脱氧核糖核酸酶 I,生物工艺级应用领域
    vue3+elementui-plus实现无限递归菜单
    Vs - Qt - 下拉窗口示例
    OpenCV 颜色检测| color detection
    北京化工大学历年真题整理:没考上,换了个学校,但还是在北京~哈哈
    1.django部署(案例)
    Lambda架构与Kappa架构的特性对比
    MySQL——多版本并发控制(MVCC)
    iframe的src可以引入任何源,但是二者如果想通信的话,必须是同源,如果是非同源,如何解决?
  • 原文地址:https://blog.csdn.net/feng_zi0yhv/article/details/125559284