首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从系统模块导出包是不允许的。

从系统模块导出包是不允许的。
EN

Stack Overflow用户
提问于 2017-07-28 09:47:03
回答 6查看 19K关注 0票数 16

我有以下节目:

module-info.java

代码语言:javascript
复制
module a {
}

Main.java

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        System.out.println(sun.nio.ByteBuffered.class);
    }
}

此程序使用--add-exports选项成功编译:

代码语言:javascript
复制
> javac --add-exports java.base/sun.nio=a module-info.java Main.java

但是,当我添加--release参数时,它失败了:

代码语言:javascript
复制
> 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

基本上,这两个命令是等价的。为什么后一条是被禁止的?

另外,由于IDEA将--release参数传递给javac,因此如果我的项目需要内部API,就不可能在IDEA中进行开发。

我正在使用JDK 9+178。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-07-30 18:19:01

这张臭虫票中可以看出,--release不能与--add-exports--add-reads--patch-module结合使用。

从链接中:

这里的总体建议是在JDK 9和(预期的) JDK 10之间保持make -Release9工作一致,即使代价是可能存在不同的命令行为,比如: $ <jdk9>/javac Test.java $ <jdk9>/javac --release 9 Test.java

另外:

这应该是可以接受的,考虑到发行版的意图,允许为给定的JDK发行版使用受支持的API编译代码。 特别是,该建议是: 编辑 -prevents使用

这里是包含以下内容的文件diff:

发布时不允许从系统模块{0}导出包。

我不能对这个理由发表评论,但从上面的引语来看,它涉及到允许JDK 9与JDK 10保持一致。

票数 10
EN

Stack Overflow用户

发布于 2019-04-06 08:12:02

如果您正在使用IntelliJ idea,请尝试检查您的Java编译器设置:

转到“文件”菜单“->设置”->构建、执行、部署-> Java,并检查"Project版本“设置。在使用JDK 11时,我遇到了一个类似的错误(“从系统模块导出包是不允许使用-- java.datatransfer的版本”),而这个值仍然设置为版本9。将它设置为11解决了问题。

票数 11
EN

Stack Overflow用户

发布于 2019-04-25 16:25:20

改用-target & -source

代码语言:javascript
复制
-target 11 -source 11
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45370178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档