gpt4 book ai didi

java - Maven 找不到从另一个模块导入的类,但 Intellij 找到了

转载 作者:行者123 更新时间:2023-12-01 17:18:41 24 4
gpt4 key购买 nike

我有多模块 Maven 项目。 acceptance-tests 模块依赖于 pom.xml 中的 api 模块(将真实公司名称替换​​为 xxx 以保密)。我正在尝试从我的验收测试中的api模块导入一些类。

这是我对 acceptance-tests 模块的 pom.xml 依赖项:

        <dependency>
<artifactId>xxx-api</artifactId>
<groupId>com.xxx</groupId>
<version>${xxx.api.version}</version>
</dependency>

maven 正在单独安装和打包 api 模块(mvn installmvn package),没有任何问题。正在我的本地 .m2 中创建 jar 文件。

但是,当我尝试编译 acceptance-tests 模块时,出现编译错误,提示无法导入类,因为找不到包。

这是实际的错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project xxx-acceptance-tests: Compilation failure: Compilation failure: 
[ERROR] /Users/andranik_chorokhyan/mydisk/Projects/XXX/automation/xxx-project-test-automation/xxx-acceptance-tests/src/main/java/com/xxx/xxx/utilities/api/ApiPayloadUtils.java:[17,38] package com.xxx.domain.dto does not exist
[ERROR] /Users/andranik_chorokhyan/mydisk/Projects/XXX/automation/xxx-project-test-automation/xxx-acceptance-tests/src/main/java/com/xxx/xxx/utilities/api/ApiPayloadUtils.java:[18,38] package com.xxx.domain.dto does not exist
[ERROR] symbol: class MappingData
[ERROR] location: class com.xxx.utilities.api.ApiPayloadUtils

一个更有趣的事实是 Intellij IDEA 中没有可见的错误。没有红色下划线,没有编译错误,导航到适当的导入文件没有问题。实际上,com.xxx.domain.dto 包和 MappingData 类确实存在。

我从本地 .m2 存储库中删除了整个 xxx 目录,并执行了 mvn clean dependency:resolve 命令。也成功了。

有人知道这里出了什么问题以及如何解决吗?提前致谢!

最佳答案

终于找到解决办法了。谢谢JF Meierkhmarbaise获取提示。

看来 Maven 不允许依赖可执行 jar。这就是我的情况。我的 api 模块是一个可执行的 Spring Boot 应用程序,而不是可重用的库。

因此,解决方案如下:

  1. 需要在 api 模块中找到 Application.java 文件。
  2. 添加 maven-jar-plugin,排除 Application.java 文件和某些分类器的规范
  3. acceptance-tests 模块中从上述指定的分类器而不是标准 jar 中建立依赖

下面api模块中的插件规范:

            <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>qa</classifier>
<excludes>
<exclude>**/Application*</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>

下面的验收测试模块中的依赖关系:

        <dependency>
<artifactId>xxx-api</artifactId>
<groupId>com.xxx</groupId>
<version>${api.version}</version>
<classifier>qa</classifier>
</dependency>

关于java - Maven 找不到从另一个模块导入的类,但 Intellij 找到了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61341102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com