【问题标题】:Java compilation error -- only with Ubuntu+openjdkJava 编译错误——仅适用于 Ubuntu+openjdk
【发布时间】:2019-04-03 19:33:54
【问题描述】:

我有一些 Java 代码可以在我的 Mac 上编译,但无法在我的 Ubuntu 机器上编译。具体来说,当使用List的静态of方法时,报错:

error: cannot find symbol
        List<String> list2 = List.of("cat", "dog");
                                 ^
  symbol:   method of(String,String)
  location: interface List
1 error

我认为这可能是 Java 版本的问题。果然,它只使用了 Java 8。但是,我随后使用 OpenJDK 升级了我的 Ubuntu 机器以使用 Java 11,但我仍然遇到同样的问题。

我在 Ubuntu 机器上运行 java -version 得到的输出是:

openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment (build 11.0.1+13-Ubuntu-3ubuntu116.04ppa1)
OpenJDK 64-Bit Server VM (build 11.0.1+13-Ubuntu-3ubuntu116.04ppa1, mixed mode, sharing)

我在 Mac 机器上运行 java -version 得到的输出是:

java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)

对于编译,我使用的是 Gradle 版本 5.2.1。我使用的是 Gradle 包装器,所以两台机器都使用相同版本的 Gradle。

这是编译不正确的文件。

package mypackage;

import java.util.List;
import java.util.ArrayList;

public class App {

    public static void main(String[] args) {
        // No errors on both MacOS and Ubuntu
        List<String> list1 = new ArrayList<>();
        list1.add("cat");
        System.out.println(list1);

        // Fails to compile on Ubuntu
        List<String> list2 = List.of("cat", "dog");
        System.out.println(list2);
    }
}

【问题讨论】:

    标签: java ubuntu


    【解决方案1】:

    List.of() 是在 Java 9 中引入的。这表明您从 Java 8 到 Java 11 的更新没有成功。

    运行./gradlew -v 以查看Gradle 解析了哪个版本的Java:

    ------------------------------------------------------------
    Gradle 5.3.1
    ------------------------------------------------------------
    
    Build time:   2019-03-28 09:09:23 UTC
    Revision:     f2fae6ba563cfb772c8bc35d31e43c59a5b620c3
    
    Kotlin:       1.3.21
    Groovy:       2.5.4
    Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
    JVM:          11.0.2 (Oracle Corporation 11.0.2+9)
    OS:           Linux 4.15.0-47-generic amd64
    

    确保您在aren't using Gradle daemon started on Java 8 before updating to Java 11build.gradle 中强制兼容Java 11:

    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多