繁体   English   中英

Spring-Boot 中未标识自定义依赖项

[英]Custom dependencies are not identified in Spring-Boot

我有两个 spring-boot 项目

  1. 迎宾库
  2. 迎宾-弹簧-引导-自动配置

我为 greeter-library 创建了 jar 文件并将其安装在我的本地 m2(maven) 存储库中。 Now I am using that jar as a maven dependency in greeter-spring-boot-autoconfigure.But it is stating Class not found on Greeter.java.

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>

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

<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 not found 这是 greeter-library 项目的一部分。

任何人都可以对此有任何解决方案吗?

由于您在“greeter-library”模块中添加了spring-boot-maven-plugin ,它将被打包为 spring 引导应用程序。 用 WinRar/WinZip 打开它,你会看到。 This is a little bit confusing, but in general spring boot application, although is packed as a JAR is not actually a jar in the sense that JVM can't load it, can't find its classes automatically, etc. For example, it在BOOT-INF/lib文件夹中有它的依赖项——这不是常规 jars 的工作方式,事实上,spring 引导有一个引导代码,它使用自定义 ZA2F2ED4F8EBC2CBB4C21A29DC40AB6D 加载器从此类结构中读取类。

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

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

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

一些需要探索的想法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM