gpt4 book ai didi

java - Eclipse jdk 11 问题 : The type java. lang.String 无法解决。它是从所需的 .class 文件间接引用的

转载 作者:行者123 更新时间:2023-12-04 17:27:34 25 4
gpt4 key购买 nike

我有一个编译错误的玩具程序 仅在 Eclipse 当我尝试使用 Chronicle 导入并编译到语言级别 11 时。该程序在 maven 和 IntelliJ 中编译和运行(使用相同的 maven 和 JDK)。

我拥有的版本是:

  • Maven 3.6.1
  • jdk openjdk 版本“11” 2018-09-25
  • eclipse 2020-03-R
  • 编年史 2.19.199(自 2.17 起支持 java11)

  • 这是我的 pom.xml
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>testjava11</groupId>
    <artifactId>chronicle-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>net.openhft</groupId>
    <artifactId>chronicle-bom</artifactId>
    <version>2.19.199</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>

    <dependencies>
    <dependency>
    <groupId>net.openhft</groupId>
    <artifactId>chronicle-map</artifactId>
    </dependency>
    </dependencies>
    </project>

    这是我的简单测试类:
    import net.openhft.chronicle.bytes.BytesMarshallable;

    public class App {
    public static void main(String[] args) {
    System.out.println("BytesMarshallable: " + new BytesMarshallable() {});
    }
    }

    使用 maven 直接运行 exec:java 时的输出是
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ---------------------< testjava11:chronicle-test >----------------------
    [INFO] Building chronicle-test 0.0.1-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ chronicle-test ---
    [INFO] Deleting C:\Users\eclipse-workspace\chronicle-test\target
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ chronicle-test ---
    [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ chronicle-test ---
    [INFO] Changes detected - recompiling the module!
    [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
    [INFO] Compiling 1 source file to C:\Users\eclipse-workspace\chronicle-test\target\classes
    [INFO]
    [INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ chronicle-test ---
    BytesMarshallable: App$1@309d6b5b
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 2.400 s
    [INFO] Finished at: 2020-06-11T15:04:53+02:00
    [INFO] ------------------------------------------------------------------------

    它在 IntelliJ 中编译,这是我作为 Java 应用程序运行时的输出:
    BytesMarshallable: App$1@39fb3ab6

    Process finished with exit code 0

    但是,在 Eclipse 中,类 App 不会编译。错误在导入行上并说:
    The type java.lang.String cannot be resolved. It is indirectly referenced from required .class files

    “问题”面板中有一条附加消息:
    The project was not built since its build path is incomplete.
    Cannot find the class file for java.lang.String.
    Fix the build path then try building this project

    但我没有看到我的构建路径中有什么问题:

    enter image description here

    此外,我可以看到包资源管理器中存在 java.lang:

    enter image description here

    (请注意,如果我将语言级别更改为 8,但仍使用 JDK 11,它将在 Eclipse 中工作。)

    我已经检查了明显的问题(构建路径、maven/jdk 路径),一切对我来说都是正确的。为什么我会在 Eclipse 中收到此错误,我该如何解决?

    最佳答案

    完整的错误信息是:

  • 类型 java.lang.String 是从所需的 .class 文件间接引用的,但无法解析,因为声明包 java.lang 导出
    来自模块 java.base 与可从模块访问的包冲突

  • 它是由传递依赖之一 net.openhft:affinity:3.2.3 引起的,它嵌入了 java.lang 包中的 2 个类,这是非法的。 Eclipse 中的 ECJ 编译器会提示它。然而,它在 javac 中工作的事实本身就是一个错误: https://bugs.openjdk.java.net/browse/JDK-8215739
    有一个关于它的亲和力问题: https://github.com/OpenHFT/Java-Thread-Affinity/issues/58
    如果您没有使用线程关联特性,只需从您的依赖项中排除关联,Eclipse 编译器就会停止提示。

    关于java - Eclipse jdk 11 问题 : The type java. lang.String 无法解决。它是从所需的 .class 文件间接引用的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62325539/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com