我在同一个文件夹中有两个不同的项目: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(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
型
2条答案
按热度按时间iswrvxsc1#
根据the Quick Start guide,通常将源代码放在以模块命名的文件夹中。在这种情况下,文件夹结构应该是:
字符串
独立于任何IDE,使用命令行工具进行实验是很有启发性的。
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
:字符串