Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error:java: error: invalid source release: 13 using JDK12 with IntelliJ

I am trying to build a project with JDK-12 ea. While trying to execute a sample class:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int value = scanner.nextInt();
    // After JEP-325
    switch (value) {
        case 1 ->System.out.println("one");
        case 2 ->System.out.println("two");
        default ->System.out.println("many");
    }
} 

The IDE throws the error that reads

Error:java: error: invalid source release: 13

Relevant project configuration screens :

enter image description here

Module settings

enter image description here

SDKs

enter image description here

enter image description here

Compiler settings

enter image description here About IDE:

IntelliJ IDEA 2018.3.3 (Community Edition)
Build #IC-183.5153.38, built on January 9, 2019
JRE: 1.8.0_152-release-1343-b26 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.6

Tried switching back the language level to 12, without experimental features, but it ends in

enter image description here

I remember using the experimental features in recent past(not sure of exact IntelliJ version) successfully. Has something changed that I need to configure apart from this as well?

like image 274
Naman Avatar asked Jan 12 '19 02:01

Naman


People also ask

How do I select Java version in IntelliJ?

Switch the Java runtime used to run IntelliJ IDEAFrom the main menu, select Help | Find Action or press Ctrl+Shift+A . Find and select the Choose Boot Java Runtime for the IDE action. Select the new desired runtime and click OK.

What is Java language level?

Language level defines coding assistance features that the editor provides. Language level can differ from your project SDK. For example, you can use the JDK 9 and set the language level to 8. This makes the bytecode compatible with Java 8, while inspections make sure you don't use constructs from Java 9.


2 Answers

The right way™

The earliest version of IntelliJ that supports switch expressions is version 2019.1, which was released on March 27, 2019. You can get it here: https://www.jetbrains.com/idea/download . You also need JDK 12 of course, and set that as your project SDK.

Then you can set the language level to:

12 (Preview) - Switch expressions

With that, everything should work.

If it doesn't, you might want to check that You've;

  • set the project language level, as well as the module language level to the "12 (Preview)"
  • set the execution JRE in the run configuration of your application to 12 (or the default, which is the project SDK).
  • set the right bytecode version in Settings -> 'Build, Execution, Deployment'/Compiler/Java Compiler. (Leave this fields empty to match the language level)

Manually configure --enable-preview (no intellisense)

Turning my comment into an answer. You can add the --enable-preview flag to the VM by going to:

Run -> Edit Configurations...

Then selecting your main class from the tree menu on the left, and pasting --enable-preview in the "VM options" box

enter image description here

You can do the same for the compiler by going to:

File -> Settings...

Then in the tree menu under Build, Execution, Deployment -> Compiler -> Java Compiler you can put --enable-preview in the "Additional command line parameters" box:

enter image description here

Note that intellisense still might not work after doing that. I'm still seeing red squiggly lines under the ->s with the error message "unexpected token". But, when I click the run button the class compiles and runs just fine.

like image 112
Jorn Vernee Avatar answered Oct 10 '22 16:10

Jorn Vernee


Just for the record. I was having similar error but with Java 14:

Error:java: error: invalid source release: 14

What solved the problem for me was to hunt down on every single place of the IDE where there was another Java version being mentioned that wasn't the 14th one.

The places that I had to change were:

File -> Project Structure -> Project Settings

File -> Project Structure -> Module Settings -> Tab: Sources: Language Level.

File -> Project Structure -> Module Settings -> Tab: Dependencies: Module SDK.

File -> Settings -> Compiler -> Java Compiler -> Target bytecode version.

like image 12
Mauricio Reis Avatar answered Oct 10 '22 16:10

Mauricio Reis