Unable to export a package from java.base module
java, java-9, java-module, java-platform-module-system, module-info
Solution
Nicolai's answer is correct regarding the techniques necessary to export an otherwise unexported package from the `java.base` module or from any other module.
But if the goal is to use `Unsafe`, the way to do so is to use `sun.misc.Unsafe` which is exported by the `jdk.unsupported` module. If you're compiling your code for the unnamed module, you needn't do anything special regarding modules to get access to it. If you're compiling code in a module, you need to add
requires jdk.unsupported;
to your `module-info.java` file.
To use `Unsafe` you have to do the reflective `setAccessible` technique to get access to the field, which is the same as you had to do in previous JDK releases:
import sun.misc.Unsafe;
...
Field theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafeField.setAccessible(true);
Unsafe theUnsafe = (Unsafe)theUnsafeField.get(null);
Even though `Unsafe` is in the `jdk.unsupported` module, this technique is supported in JDK 9, in accordance with JEP 260.
Problem
Using IDEA-EAP for JDK9 development experiments. I am getting the following error - ``` Error:(3, 20) java: package jdk.internal.misc is not visible (package jdk.internal.misc is declared in module java.base, which does not export it to module com.jigsaw.npe) ``` The class definition is as - ``` package experiment; import jdk.internal.misc.Unsafe; public class CompareAndSwap { static Unsafe UNSAFE = Unsafe.getUnsafe(); ... } ``` I've tried including a `module-info.java` file as well inside the module created using the IDE with the following statements - ``` module com.jigsaw.npe { requires java.base; } ``` Directory structure now looks as depicted in the picture - The IDE though reflects the `module-info.java` as unused and probably this is the reason that I am not able to define the `module com.jigsaw.npe` as tried above. Looking for some help on to how to correctly place the module-info.java and/or anything other than that which I've missed.