为什么我得到sun.misc.Contended符号找不到错误?

时间:2017-10-07 16:55:10

标签: java maven java-9

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

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 个答案:

答案 0 :(得分:2)

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

  

...朋友界面应该移出&#39; sun.misc&#39;   并位于一个真正的私人包装。这是他们不是   部分拟出口&#39; sun.misc&#39;封装

您可以使用--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