代码之家  ›  专栏  ›  技术社区  ›  Gilgamesz

为什么我要晒太阳。其他。争用符号找不到错误?

  •  2
  • Gilgamesz  · 技术社区  · 8 年前

    我有一个非常简单的程序:

    Test.java

    package com;
    import sun.misc.Contended;
    public class Test {
    }
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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</groupId>
    <artifactId>Test</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <maven.compiler.source>1.9</maven.compiler.source>
        <maven.compiler.target>1.9</maven.compiler.target>
    </properties>
    </project>
    

    当我把 mvn compile 我有:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project proj: Compilation failure
    [ERROR] /home/john/Desktop/proj/src/main/java/com/Test.java: cannot find symbol
    [ERROR] symbol:   class Contended
    [ERROR] location: package sun.misc
    

    为什么?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Ravi    8 年前

    因为 sun.misc 已移至 jdk.internal.misc 它们是JDK的私有包。

    ... 朋友界面应该移出“sun”。杂项 位于一个真正的私人包裹中。这是因为他们不是

    您可以使用 --add-exports --add-opens 访问内部API。

    在您的情况下,您可以在 pom.xml

    <compilerArgs>
       <arg>--add-exports</arg>
       <arg>java.base/jdk.internal.misc=<<your.module>></arg>
    </compilerArgs>
    

    <<your.module>> 到您的实际模块名称。

    参考:- JEP-261:Module System