编译时如何告诉eclipse添加导出
Posted
技术标签:
【中文标题】编译时如何告诉eclipse添加导出【英文标题】:How to tell eclipse to add-exports when compiling 【发布时间】:2019-06-01 19:11:07 【问题描述】:是否可以告诉 eclipse 添加以下命令行选项:
--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
编译时。
我认为运行测试时可能也需要它。
是否也可以删除此消息:
请注意,我尝试将这些添加到我的一个单元测试的 VM 选项中,但没有奏效。
【问题讨论】:
【参考方案1】:-
转到项目>属性:Java 构建路径,选项卡库
选择 JRE > Is modules 节点并点击 Edit...
转到标签详细信息
在添加的导出部分点击添加...
输入以下内容:
源模块:
jdk.compiler
包裹: com.sun.tools.javac.tree
【讨论】:
注意,为了能够编辑Is模块化节点,需要一个模块化的JDK,所以先换个JDK,申请并关闭然后重新打开构建路径属性,否则 Eclipse 无法编辑它。配置也发生了变化,现在可以在名为 Modules Dependencies 的特定选项卡中使用它。 此外,Eclipse 要求 JDK 出现在 ModulePath 上,否则您无法像在命令行上那样配置--add-export
。 ?♂️
@Brice 我没明白你的意思。你说的JDK是什么意思?使用 Java 9 或更高版本时,系统库始终位于模块路径上。系统库无法通过 Eclipse 或命令行参数移动到类路径。
其实它可以在classpath和module path两种模式下工作,拿这个类public class Main public static void main(String[] args) System.out.println(sun.jvmstat.monitor.HostIdentifier.class);
,你可以将一个包从一个模块导出到classpathjavac --add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED Main.java
,我没有声明任何模块。
@Brice 是的,这“有效”。但是根据 Java 语言规范,Java 9 及更高版本的系统库必须被视为在模块路径上。从 Java 9 开始,在类路径和系统库的模块中拥有相同的包是非法的。它正在工作是javac
的已确认错误,并且无法保证(即将推出的)Java VM 在忽略此错误时不会崩溃,请参阅***.com/a/53824670/6505250【参考方案2】:
您可以在 VM 参数上添加 --add-exports jdk.compiler/....
选项,如下所示。
【讨论】:
这些不是java
参数吗?或者这些也用于javac
?只是想了解一下,虽然我不是 Eclipse 用户。
您可以使用相同的 jvm 选项和 'javac'
启动配置中的这些设置用于运行/调试 Java 应用程序,而不用于编译(Eclipse 有自己的编译器)。
嗨,howlger,用于运行/调试的配置也可以在编译期间使用 Window > Preferences > Java > Compiler > Classfile Generation。 (各种复选框)被选中。参考:***.com/questions/9483315/…
@RameshSubramanian 我认为这行不通,因为那将是运行主程序而不是编译的参数。是的,您可以为 javac 使用相同的 JVM 选项,但是我们如何告诉 eclipse 这样做呢?另外,我们如何阻止 eclipse 给出错误消息?以上是关于编译时如何告诉eclipse添加导出的主要内容,如果未能解决你的问题,请参考以下文章