如何在Jdk9/java-9中解决module-info.java编译错误

NIr*_*odi 6 java openjdk java-platform-module-system java-9

我试图使用jdk-9在代码下运行,但在使用命令编译时遇到问题

命令

 javac -d mods .\module-info.java com\nirav\modi\Test.java
Run Code Online (Sandbox Code Playgroud)

错误

.\module-info.java:1: error: class, interface, or enum expected
module module1 { }
^
1 error
Run Code Online (Sandbox Code Playgroud)

module-info.java

module module1 { 

}
Run Code Online (Sandbox Code Playgroud)

Test.java

package com.nirav.modi;

class Test {

    public static void main(String args[]){

        System.out.println("Hello Modular...");

    }

}
Run Code Online (Sandbox Code Playgroud)

包结构如下

module1\module-info.java
module1\com\nirav\modi\Test.java
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

Jay*_*Jay 9

根据拼图问题列表,模块名称不能以数字结尾.目的是阻止作者编码模块名称中的版本号.

  • 请注意,目前(请参阅此评论时间戳)建议"退回"限制.(就个人而言,我希望它失败了......但这不是我的号召.) (2认同)
  • @StephenC 经过广泛的反馈,对规范进行了修订,以允许在模块名称末尾使用数字:http://openjdk.java.net/projects/jigsaw/spec/issues/#VersionsInModuleNames (2认同)

Eug*_*ene 1

看起来你正在使用非 jigsaw jdk 版本进行编译...这是它们是jigsaw 的链接

使用该编译器,您可以在我的笔记本电脑上很好地编译这些相同的示例。

这是 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)
Run Code Online (Sandbox Code Playgroud)

编辑 它适用于拼图和非拼图构建。我刚刚尝试过(版本 149)

编辑2所以我尝试过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
Run Code Online (Sandbox Code Playgroud)

删除“1”并运行相同的命令编译正常,并且创建了 mods 目录,两个类文件都编译得很好。

  • 大多数模块化功能也可以在“常规”版本中找到。@Eugene:您是否尝试过它是否真的对其中之一不起作用?(现在没时间尝试。) (2认同)
  • @Nicolai我的失败..它确实适用于简单的构建。我会更新答案 (2认同)