【发布时间】:2021-01-29 07:48:48
【问题描述】:
我有一个多模块 Maven 项目,包含模块“应用程序”和“域”。应用程序取决于域。域模块具有公共和私有代码。公共代码在包**/domain/api/**中。
在 Domain 模块的 pom 中,我为 maven jar 插件添加了一个执行,该插件会生成一个带有分类器“api”(仅包含公共类)的附加项目工件。
在 App 模块中,我在 Domain 模块上添加了一个“运行时”范围的依赖项(因此所有类都存在于运行时),并在分类的“API”上添加了一个编译时范围的依赖项。这是为了确保 App 模块只访问域中的公共 api 代码。
一切都编译并运行。我已经从域模块中检查了 api 工件的内容,它只包含打算公开的代码。
但在 IntelliJ 中,我仍然可以使用(导入)私有包中的域代码。 IntelliJ 似乎忽略了分类器部分。因此,当我引用私有代码(恕我直言,这是错误的)并且 Maven 构建失败(这很好)时,IntelliJ 会编译。
这是 IntelliJ 问题还是我遗漏了什么?
de App 模块中的相关 pom 部分:
<dependency>
<groupId>com.acme</groupId>
<artifactId>sbp-domain</artifactId>
<version>${project.version}</version>
<classifier>api</classifier>
</dependency>
<dependency>
<groupId>com.acme</groupId>
<artifactId>sbp-domain</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
【问题讨论】:
-
为“api”和另一个包含私有(“sbp-domain”)的模块创建单独的模块。最简单的解决方案。还简化了配置,无需补充执行插件等。
-
是的,当然。我听从了你的建议,就像一个魅力。谢谢!
标签: java maven intellij-idea