我正在尝试使用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)
答案 0 :(得分:7)
根据Jigsaw Issues List,模块名称不能以数字结尾。目的是阻止作者编写模块名称中的版本号。
答案 1 :(得分:2)
JSR 376尚未最终确定,有几个主题仍在讨论中。有关#VersionsInModuleNames主题的最新提议如下:
http://mail.openjdk.java.net/pipermail/jpms-spec-experts/2017-March/000659.html
答案 2 :(得分:1)
好像你正在使用非拼图jdk构建这里编译......这里的链接是jigsaw
使用该编译器,您可以在我的笔记本电脑上编译这些相同的样本。
这就是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目录创建时,两个类文件编译得很好。
答案 3 :(得分:0)
根据JDK-8160181,禁止在模块名称中使用数字,但是它们不应与版本控制相关。
示例:
由于Lint无法弄清数字的含义,因此默认情况下会报告数字,因此您可以使用以下命令在模块文件中取消显示数字:
@SuppressWarnings("module") // 1 in module1 is module number, not version
module module1 {
...
}
该评论是可选的,但解释了“为什么”警告被取消