Zhe*_*lov 10 java javac java-platform-module-system java-9
我有以下程序:
module-info.java
module a {
}
Run Code Online (Sandbox Code Playgroud)
Main.java
public class Main {
public static void main(String[] args) {
System.out.println(sun.nio.ByteBuffered.class);
}
}
Run Code Online (Sandbox Code Playgroud)
该程序成功编译--add-exports选项:
> javac --add-exports java.base/sun.nio=a module-info.java Main.java
Run Code Online (Sandbox Code Playgroud)
但是,当我添加--release参数时,它会失败:
> javac --add-exports java.base/sun.nio=a --release 9 module-info.java Main.java
error: exporting a package from system module java.base is not allowed with --release
1 error
Run Code Online (Sandbox Code Playgroud)
基本上,这两个命令是等效的.那么为什么后者被禁止呢?
此外,由于IDEA将--release参数传递给javac,如果我的项目需要内部API,这使得IDEA的开发变得不可能.
我正在使用JDK 9 + 178.
小智 7
如果您使用 IntelliJ idea,请尝试检查您的 Java 编译器设置:
转到文件菜单 -> [设置] -> [构建、执行、部署] -> [Java 编译器] 并检查设置“项目字节码版本”。我在使用 JDK 11 时遇到了类似的错误(“--release 不允许从系统模块 java.datatransfer 导出包”),而该值仍设置为版本 9。将其设置为 11 为我解决了这个问题。
从这个错误票中看来,--release不能与--add-exports、--add-reads、 和结合使用--patch-module。
从链接:
这里的总体建议是让 make --release 9 在 JDK 9 和(预期的)JDK 10 之间保持一致,即使代价是命令可能具有不同的行为,例如:
$ <jdk9>/javac Test.java
$ <jdk9>/javac --release 9 Test.java
还:
考虑到 --release 的意图,这应该是可以接受的 - 允许使用给定 JDK 版本支持的 API 编译代码。
该提案特别是:
[编辑]
-防止将--add-exports、-add-reads 和--patch-module 与--release(任何版本)结合用于系统模块
--release 不允许从系统模块 {0} 导出包
我无法评论其基本原理,但从上面的引用来看,它与允许 JDK 9 与 JDK 10 一致工作有关。
| 归档时间: |
|
| 查看次数: |
2803 次 |
| 最近记录: |