var cannot be resolved to a type - java-10
Asked Answered
T

2

14

I simply installed JDK 10 on my mac machine. Checked for the version:-

localhost:java-10 vinayprajapati$ java -version
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)

Just to make sure that compiler used is also same version, I ran below:-

localhost:java-10 vinayprajapati$ javac -version
javac 10

I created a simple Maven project with following structure:-

localhost:java-10 vinayprajapati$ tree
.
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── practice
│   │               └── java_10
│   │                   └── App.java
│   └── test
│       └── java
│           └── com
│               └── practice
│                   └── java_10
│                       └── AppTest.java
└── target

My pom.xml is:-

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.practice</groupId>
    <artifactId>java-10</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>java-10</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <release>10</release>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.ow2.asm</groupId>
                        <artifactId>asm</artifactId>
                        <version>6.1</version> <!-- Use newer version of ASM -->
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

My App.java file is:-

package com.practice.java_10;

import java.util.ArrayList;

public class App {
    public static void main(String[] args) {
        var list = new ArrayList<String>(); 
        System.out.println("Hello Java 10! Shall I welcome you?");

    }
}

I ran mvn compile and mvn install and both worked successfully. Proof below:-

localhost:java-10 vinayprajapati$ mvn compile
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------< com.practice:java-10 >------------------------
[INFO] Building java-10 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ java-10 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/vinayprajapati/Desktop/project/java-10/java-10/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ java-10 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/vinayprajapati/Desktop/project/java-10/java-10/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.823 s
[INFO] Finished at: 2018-03-23T01:49:13+05:30
[INFO] ------------------------------------------------------------------------
localhost:java-10 vinayprajapati$ mvn install
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------< com.practice:java-10 >------------------------
[INFO] Building java-10 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ java-10 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/vinayprajapati/Desktop/project/java-10/java-10/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ java-10 ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ java-10 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/vinayprajapati/Desktop/project/java-10/java-10/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ java-10 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/vinayprajapati/Desktop/project/java-10/java-10/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ java-10 ---
[INFO] Surefire report directory: /Users/vinayprajapati/Desktop/project/java-10/java-10/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.practice.java_10.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ java-10 ---
[INFO] Building jar: /Users/vinayprajapati/Desktop/project/java-10/java-10/target/java-10-0.0.1-SNAPSHOT.jar
[INFO] META-INF/maven/com.practice/java-10/pom.xml already added, skipping
[INFO] META-INF/maven/com.practice/java-10/pom.properties already added, skipping
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ java-10 ---
[INFO] Installing /Users/vinayprajapati/Desktop/project/java-10/java-10/target/java-10-0.0.1-SNAPSHOT.jar to /Users/vinayprajapati/.m2/repository/com/practice/java-10/0.0.1-SNAPSHOT/java-10-0.0.1-SNAPSHOT.jar
[INFO] Installing /Users/vinayprajapati/Desktop/project/java-10/java-10/pom.xml to /Users/vinayprajapati/.m2/repository/com/practice/java-10/0.0.1-SNAPSHOT/java-10-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.157 s
[INFO] Finished at: 2018-03-23T01:49:22+05:30
[INFO] ------------------------------------------------------------------------

When ran mvn exec:java -Dexec.mainClass="com.practice.java_10.App", I got error as below :-

localhost:java-10 vinayprajapati$ mvn exec:java -Dexec.mainClass="com.practice.java_10.App"
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------< com.practice:java-10 >------------------------
[INFO] Building java-10 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ java-10 ---
[WARNING] 
java.lang.Error: Unresolved compilation problem: 
    var cannot be resolved to a type

    at com.practice.java_10.App.main (App.java:11)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:564)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:282)
    at java.lang.Thread.run (Thread.java:844)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.019 s
[INFO] Finished at: 2018-03-23T01:51:02+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project java-10: An exception occured while executing the Java class. Unresolved compilation problem: 
[ERROR]     var cannot be resolved to a type
[ERROR] 
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

I am not sure why am I getting this error. Any thoughts are welcome. Meanwhile I try searching for root cause.

Tripletail answered 22/3, 2018 at 20:25 Comment(0)
M
9

You have to set the runtime plugin to Java 10 too or the root configuration. Right now it's just the compiler.

Malherbe answered 22/3, 2018 at 20:27 Comment(6)
you mean the JRE? I checked for both java and javac versions and both point to java-10Tripletail
No. Either the java goal in Maven or the exec plugin, just like you did with the maven compiler plugin.Malherbe
sorry, not really good at maven. would you mind putting more details in your answer itself?Tripletail
When you run a maven command like compile or exec you are activating a plugin. There are default plugins and configurations, you changed those for the maven-compiler-plugin to use Java 10. Look up "maven executions" and the exec plugin. Or you can try adding this to the top of your code <properties><java.version>10</java.version></properties>Malherbe
Best solution for this is toolchains maven.apache.org/guides/mini/guide-using-toolchains.html.Kleptomania
You seems correct. I figured out that compiled code version was 9 while execution JRE version was 10.Tripletail
G
3

In my case I had:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>17</source> <-----
                <target>17</target> <-----
           ...

And I had to match this version with <java.version> value

Galliard answered 13/12, 2022 at 14:56 Comment(4)
Would have been ideal if you had included the whole POM so someone reading this in the future could figure out what you changed.Yellowstone
@FreelanceConsultant I added arrows for that. For the rest I think it's enough searchableGalliard
Without the rest of the pom, I have no idea where this is supposed to be placed.Yellowstone
@FreelanceConsultant just search maven-compiler-plugin. If you cannot find it in your pom, then this isn't a problem for youGalliard

© 2022 - 2025 — McMap. All rights reserved.