当前位置: 首页 > 知识库问答 >
问题:

具有分类依赖的Intellij Maven多模块项目

岳劲
2023-03-14

我有一个多模块Maven项目,有模块“app”和“域”。应用依赖于域。域模块有公共和私有代码。公共代码在包**/域/api/**中。

在Domain模块的pom中,我添加了maven jar插件的执行,该插件使用分类器“api”(仅包含公共类)生成一个额外的项目工件。

在应用程序模块中,我在域模块上添加了一个“运行时”范围的依赖项(因此所有类都存在于运行时),并在分类的“API”上添加了编译时范围的依赖。这是为了确保应用程序模块仅从域访问公共api代码。

一切都编译和运行。我已经从域模块中检查了api工件的内容,它只包含要公开的代码。

但在IntelliJ中,我仍然能够使用(导入)私有包中的域代码。IntelliJ似乎忽略了分类器部分。因此,当我引用私有代码(这是错误的IMHO)而Maven构建失败(这是好的)时,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>

共有1个答案

窦伟
2023-03-14

Intellij在复杂的maven依赖项方面遇到了问题。尤其是当您尝试过滤原始项目时。

我在<code>test jar</code>(简单方法)中遇到了相同的问题,因为Intellij忽略了排除。IDEA-204719跟踪进度。

khmrbase在评论中是正确的。您应该为 API 创建一个单独的项目。这种方法的唯一缺点是,您必须复制(或进一步使您的模块复杂化)api实现共享测试代码。解决方案可能是测试罐,正如我所解释的那样,它在Intellij中无法正常工作。

 类似资料:
  • 我有一个多模块maven项目,包含三个模块、和 Core具有以下依赖项定义 我已经为所有三个模块添加了Java9定义,的如下所示: 但是,我不知道如何让的测试类能够在测试执行期间看到类。当尝试测试运行时,找不到类。 如果向的添加需要My.Project.TestUtils;的: 然后在编译时,我得到一个错误,即找不到模块(大概是因为它只是作为测试依赖项引入的)。 在Java9模块化的世界中,如何处

  • 在使用Gradle插件和的多模块项目中,正确的Gradle配置是什么样子的? 我有以下项目设置: 模块包含公共项目配置。 模块是一个我希望使用spring-boot-dependencies bom中指定的版本号导入依赖项的模块,但结果是一个标准JAR。 模块是一个依赖于的模块,其结果是一个可执行的spring boot jar文件(包括所有依赖项)。因此,该项目既需要也需要插件。 为了保持Gra

  • 我有一个多模块Maven项目,其中包含子模块ModuleA和ModuleB等。ModuleA将ModuleB列为依赖项。但是,当仅构建模块A时,Maven不会解决模块B的依赖关系-导致。我想避免构建整个父级以使构建更快。目前我发现让它工作的唯一方法是使用exec插件和脚本,将父项目称为“ModuleB, ModuleA”,这意味着我必须在每次依赖项更改时更改脚本(例如添加ModuleC)。 是否有

  • 我有一个关于Maven依赖解析机制如何在多模块项目中工作的问题。 通常,我只在构建多模块项目时使用“mvn clean install”,我的假设是,如果项目中的任何模块需要以前的模块,依赖关系将通过访问本地存储库并加载相应的“jar”来解决。 由于项目内部原因,我必须使用“mvn清洁编译”,这个命令自然不会创建任何“jar”,而“install”不存在。所以在这里我开始想知道,多模块项目的依赖项

  • 我在项目中有两个模块(和)运行集成测试。我希望在测试之前,我的应用程序将使用liquibase启动和滚动迁移,但由于我通过集成测试模块运行应用程序,liquibase正在寻找一个关于该模块的主文件,该文件导致了错误。因为主文件位于miom应用程序()的模块中

  • 我正在使用STS 2.9.1(构建在Eclipse 3.7.2上)和与STS(V1.0.200.20111228-1245)绑定的m2e插件。 我有一个问题是包含多个模块的Eclipse项目中缺少依赖项,或者我不完全理解它应该如何工作。 这是一个maven项目。 在我的项目>Properties>Java Build Path>Libraries中,我有“maven dependencies”库,