项目结构如下:
/proj-root
/proj-lib
/proj-cli
字符串proj-root
将proj-lib
和proj-cli
项目定义为它的(maven)模块。它有pom
封装,而其他两个有jar
封装。我在proj-cli/pom.xml
中添加了对proj-lib
的依赖项
使用IntelliJ IDE,我可以导入我的项目,没有任何问题。无论是在IDE中还是从终端运行mvn
命令时,构建和运行都可以正常工作。
但是,我在proj-cli
中缺少import
语句。
假设在proj-lib/src/main/java/Util.java
中有一个类Util
。我可以在proj-cli/src/main/java/Main.java
中使用这个类,而不必(显式地)导入它。尝试使用import groupId.artifactId.Util;
手动导入类失败,因为无法解析此路径。
虽然许多导入可能很乏味,但我实际上喜欢看到所有来自其他地方的东西,包括兄弟模块。所以我的问题是--这种隐含的导入是有意的吗?我如何明确地导入它?虽然我还没有谈到这一点,但是如果我必须完全限定这样一个导入的工件和组ID以避免命名冲突,该怎么办呢?
1条答案
按热度按时间ctrmrzij1#
您需要区分Maven部件和Java部件。
groupId
和artifactId
是Maven特定的部分。import
是Java,而Util
类没有package。类包表示放置源文件的目录树。对于Maven,按照惯例将主要源代码放在src/main/java
中。这就是你的根。这就是您的Util.java
放置的位置。它不在子目录中,因此没有包。如果您有
Util
类,例如在src/main/java/my/proj/lib/Util.java
中,它将在Java包my.proj.lib
中,您可以使用import my.proj.lib.Util;
导入它关于命名冲突:我不完全确定你的意思是什么,但它是常见的(但不是必须的任何手段)开始包名称与反向域名的项目。例如,如果项目主页是https://my-awsome-project.com,则所有软件包都可以以
com.my-awsome-project.*
开头。Maven也有相同的约定,其中
groupId
通常是所属项目的反向域名。由于域名是唯一的,这可以防止大多数命名冲突。