如何在Jdk9 / java-9中解决module-info.java编译错误
我试图使用jdk-9在代码下运行,但在使用命令编译时遇到问题
命令
javac -d mods .\module-info.java com\nirav\modi\Test.java
错误
.\module-info.java:1: error: class, interface, or enum expected module module1 { } ^ 1 error
module-info.java
module module1 { }
Test.java
package com.nirav.modi; class Test { public static void main(String args[]){ System.out.println("Hello Modular..."); } }
包结构如下
module1\module-info.java module1\com\nirav\modi\Test.java
JDK版本
java version "9-ea" Java(TM) SE Runtime Environment (build 9-ea+153) Java HotSpot(TM) 64-Bit Server VM (build 9-ea+153, mixed mode)
根据拼图问题列表 ,模块名称不能以数字结尾。 目的是阻止作者在模块名称中编码版本号。
JSR 376尚未最终确定,有几个主题仍在讨论中。 关于#VersionsInModuleNames主题的最新提案如下:
http://mail.openjdk.java.net/pipermail/jpms-spec-experts/2017-March/000659.html
好像你正在使用非拼图jdk构建这里编译……这里是链接,他们是拼图
使用该编译器,您可以在我的笔记本电脑上编译这些相同的样本。
这就是java -version对项目拼图的看法:
java version "9-ea" Java(TM) SE Runtime Environment (build 9-ea+153-jigsaw-nightly-h6003-20170124) Java HotSpot(TM) 64-Bit Server VM (build 9-ea+153-jigsaw-nightly-h6003-20170124, mixed mode)
编辑它适用于拼图和非拼图构建。 我刚尝试过(构建149)
EDIT2所以我尝试使用jdk-9 build 153,这是我得到的:
javac -d mods module-info.java Modules.java module-info.java:1: warning: [module] module name module1 should avoid terminal digits module module1 { ^ 1 warning
删除“1”并运行相同的命令编译确定和mods目录创建时,两个类文件编译得很好。