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

问题描述 投票:0回答:2

我在同一个文件夹中有 2 个不同的项目:

com.jdojo.address
com.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(内部版本 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
java java-9
2个回答
7
投票

根据“快速入门指南”,惯例是将源代码放在以模块命名的文件夹中。在这种情况下,文件夹结构应该是:

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 的命令行工具进行实验很有启发性。我已经在

here说明了这个案例。


0
投票

module-info.java
的放置

对我来说,关键是

module-info.java

的位置以及命名。

我正在将一个多模块 Maven 项目从 Java 11 迁移到 Java 17。在 Java 11 中,该项目会正确构建,直到您添加

module-info.java

 文件。然后您可能会发现不同类型的错误,从“X 模块不可见”到“JavaDoc:没有模块 Y 的源”

我用

module-info.java

 自动生成了 
jdeps
 文件。这意味着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; }
    
© www.soinside.com 2019 - 2024. All rights reserved.