Intellij Idea 从maven同级模块导入

qvtsj1bj  于 2023-08-03  发布在  Maven
关注(0)|答案(1)|浏览(157)

项目结构如下:

/proj-root
   /proj-lib
   /proj-cli

字符串
proj-rootproj-libproj-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以避免命名冲突,该怎么办呢?

ctrmrzij

ctrmrzij1#

您需要区分Maven部件和Java部件。
groupIdartifactId是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通常是所属项目的反向域名。由于域名是唯一的,这可以防止大多数命名冲突。

相关问题