无法从module-info.java找到模块

gijlo24d  于 11个月前  发布在  Java
关注(0)|答案(2)|浏览(106)

我在同一个文件夹中有两个不同的项目:com.jdojo.addresscom.jdojo.person。第一个项目有一个简单的pojo类Address和一个默认包下的module-info.java

module com.jdojo.address {
    exports com.jdojo.address;
}

字符串
这里没有错误。
com.jdojo.person项目中,我有一个Person类,它使用了上一个Address属性。module-info.java

module com.jdojo.person {
    requires com.jdojo.address;
    exports com.jdojo.person;
}


requires行中有一个错误:
模块未找到:com.jdojo.address
我在使用NetBeans IDE Dev(Build 201708030001)IntelliJ IDEA 2017.2.1时都遇到了此问题。

├───com.jdojo.address
│   ├───.idea
│   │   └───inspectionProfiles
│   ├───nbproject
│   │   └───private
│   └───src
│       └───com
│           └───jdojo
│               └───address
├───com.jdojo.intro
│   ├───.idea
│   │   ├───inspectionProfiles
│   │   └───libraries
│   ├───build
│   │   ├───classes
│   │   │   └───com
│   │   │       └───jdojo
│   │   │           ├───address
│   │   │           ├───intro
│   │   │           └───person
│   │   ├───empty
│   │   └───generated-sources
│   │       └───ap-source-output
│   ├───dist
│   ├───nbproject
│   │   └───private
│   ├───src
│   │   └───com
│   │       └───jdojo
│   │           └───intro
│   └───test
├───com.jdojo.person
│   ├───.idea
│   │   └───inspectionProfiles
│   ├───nbproject
│   │   └───private
│   ├───src
│   │   └───com
│   │       └───jdojo
│   │           └───person
│   └───test
├───lib
├───mods
│   └───com.jdojo.intro
│       └───com
│           └───jdojo
│               └───intro
└───src
    └───com.jdojo.intro
        └───com
            └───jdojo
                └───intro


这些是模块信息和Java类路径

C:\Java9Revealed\com.jdojo.address\src\module-info.java
C:\Java9Revealed\com.jdojo.address\src\com\jdojo\address\Address.java

C:\Java9Revealed\com.jdojo.person\src\module-info.java
C:\Java9Revealed\com.jdojo.person\src\com\jdojo\person\Person.java

iswrvxsc

iswrvxsc1#

根据the Quick Start guide,通常将源代码放在以模块命名的文件夹中。在这种情况下,文件夹结构应该是:

com.jdojo.address/src/com.jdojo.address/module-info.java
com.jdojo.address/src/com.jdojo.address/com/jdojo/address/Address.java

com.jdojo.person/src/com.jdojo.person/module-info.java
com.jdojo.person/src/com.jdojo.person/com/jdojo/person/Person.java

字符串
独立于任何IDE,使用命令行工具进行实验是很有启发性的。

00jrzges

00jrzges2#

放置module-info.java

对我来说,关键是module-info.java的位置和命名。
我正在将一个多模块maven项目从Java 11迁移到Java 17。在Java 11中,项目可以正确构建,直到您添加module-info.java文件。然后您可能会发现不同类型的错误,从“X模块不可见”到“JavaDoc:no sources for module Y”。
我用jdeps自动生成了module-info.java文件,这意味着java模块是以maven项目模块命名的,这与任何java包名都不一致。
将模块声明重命名为实际的java包是第一步。
然后我试图根据这里的答案来跟踪module-info.java文件的位置,但最后,每个maven模块有一个java模块,足以将module-info.java放在src/main/java目录中,就在com/company/application开始的地方,比如com.company.application.api(而不是源代码所在的地方,因为我被告知了几个地方)。
所以,不是src/main/java/com/company/application/api/module-info.java而是src/main/java/module-info.java),对于像这样的module-info.java

module api {
    exports com.company.application.api;
}

字符串

相关问题