Java 模块目录或模块文件内部名称应相同或不同

Java 模块目录或模块文件内部名称应相同或不同,java,java-9,java-module,module-info,module-path,Java,Java 9,Java Module,Module Info,Module Path,目录结构 . ├── out │   └── calc-module │   ├── com │   │   └── ngsharma │   │   └── ocp │   │   └── Calculator.class │   └── module-info.class └── src └── calculator ├── com │   └── ngsharma │  

目录结构

. ├── out │   └── calc-module │   ├── com │   │   └── ngsharma │   │   └── ocp │   │   └── Calculator.class │   └── module-info.class └── src └── calculator ├── com │   └── ngsharma │   └── ocp │   └── Calculator.java └── module-info.java 当我在下面的命令中编译这个模块时
1.java-p out——添加模块calc module com.ngsharma.ocp.Calculator 当我使用这个命令时,它抛出异常FindException:Modulecalc Modulenot found
根据1。模块内部名称和模块目录名称应与其他抛出FindException相同
2java-p out——添加模块calc com.ngsharma.ocp.Calculator
但是在这种情况下,我没有使用模块目录名,我只在文件名中使用了module info.java,并成功运行了。怎样。。?为什么
模块文件名和模块文件夹名应该相同,否则不编译和运行它是否正确。请任何人建议我并纠正我的错误。(模块中的新手)。

后一个命令

java -p out --add-modules calc com.ngsharma.ocp.Calculator
因为
--add modules
接受modulepath(
out
目录)上存在的模块名称作为参数,在本例中,模块名称是
calc
,而不是
module info.java
所在文件夹的名称

要直接回答这个问题,没有命令将生成模块的目录命名为与模块名称相同的目录。

这(您的第一个命令)不起作用,因为没有命名为
计算模块的模块。模块的名称为
calc
,如
module info.java

java -p out --add-modules calc-module com.ngsharma.ocp.Calculator <-- cannot work

编撰 直接父目录 如果所包含模块的目录名与模块名相同,则有一种方法可以轻松编译模块。在这种结构中:

.
+-- src
    +-- calc
        +-- com
        ¦   +-- ngsharma
        ¦       +-- ocp
        ¦           +-- Calculator.java
        +-- module-info.java
现在,可以使用以下方法编译整个模块:

javac -d out --module-source-path src -m calc
out目录结构将自动具有模块的名称,因此与src结构相同

如果目录名与模块名不相同,则此命令将不起作用,在这种情况下,您将得到
错误:模块源路径中未找到模块计算

程序的运行方式没有区别。这仅对编译有效

非直接父目录 使用
--module source path
并不要求与模块名相同的目录名是包的直接父目录。您还可以创建此通用结构,其中模块名称位于根目录中的多个目录上:

.
+-- calc
    +-- src
        +-- main
            +-- java
                 +-- com
                 ¦    +-- ngsharma
                 ¦        +-- ocp
                 ¦            +-- Calculator.java
                 +-- module-info.java
但是,在这种情况下,您需要检查compile命令(如中所述):


请注意,不要求目录与模块本身共享名称。它只是有助于构建您的程序并简化编译。

“根据java文档,模块文件名和模块文件夹名应该相同”,请为您的报价共享参考。“根据”什么?这句话没有意义。。除此之外,“模块文件名”始终是
module info.java
(和
module info.class
)。
java -p out --add-modules calc com.ngsharma.ocp.Calculator
java -p out --module calc/com.ngsharma.ocp.Calculator
.
+-- src
    +-- calc
        +-- com
        ¦   +-- ngsharma
        ¦       +-- ocp
        ¦           +-- Calculator.java
        +-- module-info.java
javac -d out --module-source-path src -m calc
.
+-- calc
    +-- src
        +-- main
            +-- java
                 +-- com
                 ¦    +-- ngsharma
                 ¦        +-- ocp
                 ¦            +-- Calculator.java
                 +-- module-info.java
javac -d out --module-source-path "./*/src/main/java/" -m calc