Java 9的选项--add-exports和-XaddExports未被识别

10

我下载了最新的jdk9构建:

java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+142)
Java HotSpot(TM) Server VM (build 9-ea+142, mixed mode)
当我执行时
/path/jdk-9/bin/java -X

我看到了这个选项:

--add-exports <module>/<package>=<target-module>(,<target-module>)*
                  updates <module> to export <package> to <target-module>,
                  regardless of module declaration.
                  <target-module> can be ALL-UNNAMED to export to all
                  unnamed modules.

但是当我尝试使用这个选项时:

/path/jdk-9/bin/java --add-exports:java.base/jdk.internal.ref=ALL-UNNAMED -jar some.jar 

I get:

Unrecognized option: --add-exports:java.base/jdk.internal.ref=ALL-UNNAMED

同样适用于一些帖子中提到的-XaddExports

我在这里做错了什么?

我是否需要特殊的jigsaw jdk9分发版本?说实话,我对不同的jdk9版本有点困惑 ;)


6
为什么要使用--add-exports:java.base/...?我本以为应该是--add-exports java.base/...(有空格)。 - Tunaki
啊,好的,我会尝试。我使用这个是因为我在旧的选项-XaddExports中看到了它。参考链接:https://arnaudroger.github.io/blog/2016/08/09/jigsaw-maven-integration.html - Karussell
哦,我的天,就是这个!请随意将其作为答案添加!非常感谢!我已经瞎搞了几个小时 ;( - Karussell
@Tunaki 不确定你是否也会收到没有明确提及的提示... - Karussell
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
19

这两个标志略有不同的语法。在某个时候(我认为是9-ea+113版本),JVM从-XaddExports切换到了--add-exports语法,作为实现JEP 293的努力之一,旨在实现命令行参数的GNU风格语法。

当前语法:

--add-exports <module>/<module>/<package>=<target-module>(,<target-module>)*
--add-reads <module>=<target-module>(,<target-module>)*

注意:一些实用工具可能无法接受新的--key value参数样式,因为它们之间有一个空格,在这种情况下,您可以在中间放置一个等号(即--key=value)以满足这些实用程序。

旧语法:

-XaddExports:<module>/<module>/<package>=<target-module>(,<target-module>)*
-XaddReads:<module>=<target-module>(,<target-module>)*

不幸的是,很容易错过空格和冒号之间的变化。我自己也犯过几次这种错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,