自定义依赖项不会在 Spring-Boot 中标识



我有两个弹簧启动项目

  1. 迎宾员图书馆
  2. 迎宾器-弹簧-引导-自动配置

我已经为欢迎程序库创建了jar文件,并将其安装在我的本地m2(maven)存储库中。 现在我正在使用那个 jar 作为 greeter-spring-boot-autoconfigure 中的 maven 依赖项。但它是在说 在迎宾员.java上找不到类。

pom.xml for greeter-library

<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>

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

由于所有这些,Maven和IDE将无法从greeter-library识别类,从而导致错误。Bootom 行,你不能真正从你的greater-spring-boot-autoconfigure模块声明对 spring 引导应用程序的依赖

现在作为解决方案 - 为什么需要greeter-library作为弹簧启动工件?也许如果您只是删除spring-boot-maven-plugin并将其转换为常规 jar(也许对 Spring 启动基础结构具有常规依赖项),它会起作用?

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

一些可以探索的想法

  1. 第一个 jar "greeter-library" 不需要打包用于 spring-boot,它可以是一个普通的 jar 文件。
  2. 在 src/resources/META-INF path 下创建一个 spring.factory 文件。从这个 JAR 公开 java 类,这些类可以被"greeter-spring-boot-autoconfigure"使用。

最新更新