【问题标题】:Custom dependencies are not identified in Spring-BootSpring-Boot 中未识别自定义依赖项
【发布时间】:2020-12-20 05:44:18
【问题描述】:

我有两个 spring-boot 项目

  1. 问候图书馆
  2. greeter-spring-boot-autoconfigure

我为 greeter-library 创建了 jar 文件并将其安装在我的本地 m2(maven) 存储库中。 现在我在greeter-spring-boot-autoconfigure中使用那个jar作为maven依赖。但它说明 在 Greeter.java 上找不到类。

greeter-library 的 pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>


<artifactId>greeter-library</artifactId>
<groupId>com.xyz.greeter</groupId>
<version>0.0.1-SNAPSHOT</version>
<name>greeter-library</name>
<dependencies>
 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

现在greeter-spring-boot-autoconfigure的pom.xml如下

<artifactId>greeter-spring-boot-autoconfigure</artifactId>
<name>greeter-spring-boot-autoconfigure</name>
<groupId>com.xyz</groupId>


<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.1</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <artifactId>greeter-library</artifactId>
        <groupId>com.xyz.greeter</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

但是在greeter-spring-boot-autoconfigure 的maven 构建期间,它指出Greeter.java 未找到,它是greeter-library 项目的一部分。

谁能解决这个问题?

【问题讨论】:

  • 你能解释更多吗?你想在第二个罐子中使用的第一个罐子里有什么?你只想使用Greeter 类?

标签: java spring spring-boot maven


【解决方案1】:

由于您在“greeter-library”模块中添加了spring-boot-maven-plugin,它将被打包为一个spring boot 应用程序。用 WinRar/WinZip 打开它,你会看到。这有点令人困惑,但在一般 Spring Boot 应用程序中,虽然被打包为 JAR,但实际上并不是 jar,因为 JVM 无法加载它,无法自动找到它的类等。例如,它在BOOT-INF/lib 文件夹中有它的依赖项——这不是常规 jar 的工作方式,事实上,spring boot 有一个引导代码,它使用自定义类加载器从这样的结构中读取类。

因此,Maven 和 IDE 将无法识别来自 greeter-library 的类,因此会出现错误。 Bootom 行,你不能真正从 greater-spring-boot-autoconfigure 模块声明对 Spring Boot 应用程序的依赖

现在作为一个解决方案 - 为什么需要 greeter-library 作为 Spring Boot 神器?也许如果您只是删除 spring-boot-maven-plugin 并将其转换为常规 jar(可能定期依赖于 Spring Boot 基础设施)它会起作用吗?

如果这没有帮助,请随时在问题中分享更多详细信息,以获得更精确的问题解决方案...

【讨论】:

    【解决方案2】:

    需要探索的一些想法

    1. 第一个jar“greeter-library”不需要为spring-boot打包,它可以是一个普通的jar文件。
    2. 在 src/resources/META-INF 路径下创建 spring.factories 文件。公开此 JAR 中可供“greeter-spring-boot-autoconfigure”使用的 java 类

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2014-05-21
      • 2020-03-31
      • 2020-11-11
      • 2022-12-22
      • 2023-04-03
      • 2015-08-02
      • 2017-01-20
      • 2020-08-28
      相关资源
      最近更新 更多