9

我下载了最新的 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 

我得到:

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

-XaddExports我在一些帖子中看到的相同。

我在这里做错了什么?

我需要一个特殊的拼图 jdk9 发行版吗?老实说,我对不同的 jdk9 版本有点困惑;)

4

1 回答 1

15

这两个标志的语法略有不同。在某些时候(我认为它是构建 9-ea+113),JVM 切换-XaddExports--add-exports语法,作为 JEP 293 努力的一部分,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>)*

不幸的是,很容易错过换结肠的空间。我自己搞砸了好几次。

于 2016-11-01T23:04:44.043 回答