【问题标题】:maven build is failing due to dependency package does not exist while dependency package actually exists由于依赖包不存在而依赖包实际存在,maven 构建失败
【发布时间】:2021-10-05 08:25:26
【问题描述】:

我在 Eclipse 中有两个 spring-boot 项目。

  1. commons-lib
  2. 密钥生成器服务

keygenerator-service 依赖于 commons-lib,所以我先构建了 commons-lib,并在 m2 文件夹中成功创建了 jar。然后我提到了对 keygenerator-service 的 pom.xml 文件的依赖,如下所示。

<dependency>
    <groupId>com.abz</groupId>
    <artifactId>commons-lib</artifactId>
    <version>1.0.0</version>
</dependency>

jar 文件以 C:\Users\snsur.m2\repository\com\abz\commons-lib\1.0.0\commons-lib-1.0.0.jar 的形式存在,看起来不错。

但是现在当我尝试构建 keygenerator-service 的 maven 构建时出现以下错误:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Drive D/Projects/workspace-backend/workspace1/keygenerator-service/src/main/java/com/abz/keygenerator/core/KeyStore.java:[13,33] package com.abz.commons.exception does not exist
[ERROR] /C:/Drive D/Projects/workspace-backend/workspace1/keygenerator-service/src/main/java/com/abz/keygenerator/core/KeyStore.java:[14,33] package com.abz.commons.exception does not exist

我可以看到该包也存在于 jar 文件中。

C:\Users\snsur\Documents\Work\SWs\jdk-11.0.11\bin>jar tvf C:\Users\snsur\.m2\repository\com\abz\commons-lib\1.0.0\commons-lib-1.0.0.jar
0 Thu Jul 29 21:33:44 IST 2021 META-INF/
358 Thu Jul 29 21:33:44 IST 2021 META-INF/MANIFEST.MF
.....
0 Thu Jul 29 21:33:46 IST 2021 BOOT-INF/classes/com/abz/commons/exception/
0 Thu Jul 29 21:33:46 IST 2021 BOOT-INF/classes/com/abz/commons/model/
INF/classes/com/abz/commons/exception/AlreadyExistsException.class
INF/classes/com/abz/commons/exception/InvalidDataException.class

我已经检查了许多 stackoverflow 链接以解决此类问题,但对我没有任何帮助。我什至删除了 .m2 文件夹并重新构建了 commons-lib 项目,但仍然没有运气。

请帮助我使用 commons-lib jar 成功构建 keygenerator-service。

【问题讨论】:

  • 这是一个多模块构建的工作......这意味着您必须将两个项目移到父级的保护伞下,并且您可以一次构建它们(假设您已经定义了依赖项正确)并且订单将由 Maven 处理...但是当然,如​​果将 jar 构建为 spring boot maven 插件,则它不再能够用作通常的依赖项...这是行不通的。跨度>
  • 是的,因为我已经将 jar 构建为 spring boot maven 插件,所以它不起作用。所以我在我的 commons-lib spring boot 项目的 pom.xml 中添加了一些插件,使其成为库,现在它可以工作了。

标签: java spring-boot maven jar


【解决方案1】:

得到 Thorbjorn 的建议后,我在 commons-lib pom.xml 中解决了这样的问题

(对于 Spring Boot 2.x)

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
      <execution>
        <id>repackage</id>
        <configuration>
          <classifier>exec</classifier>
        </configuration>
      </execution>
    </executions>
  </plugin>

现在它作为依赖项/库工作。

【讨论】:

    【解决方案2】:

    这是一个可运行的spring boot jar。

    使其可运行会破坏其用作依赖项的能力(注意路径前缀)

    修复:仅对您要运行的最终 jar 执行此操作。

    【讨论】:

    • 谢谢。你的建议奏效了。我在 pom.xml 中添加了一些插件,使其成为库。
    猜你喜欢
    • 2017-08-14
    • 1970-01-01
    • 2012-05-14
    • 2023-03-30
    • 2014-03-08
    • 2015-09-27
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多