小编典典

无法导入类,IntelliJ显示BOOT-INF前缀,并且似乎相关

spring-boot

这是与Java和Maven一起使用的-
我正尝试从一个项目中导入一些类,这些类可以在我的机器上构建到本地mvn存储库中,也可以从公司的外部mvn存储库中下载(已打包)。当查看“外部库”并扩展相关库时,我在左侧“项目”窗格中查看IntelliJ时确实注意到,有问题的jar下方的所有类都有一个“
BOOT-
INF.classes”前缀。如果有帮助的话,这也是一个springboot项目,尽管我可以从外部存储库中导入所有springboot类和所有其他类。

(在“外部库”下左窗格的IntelliJ项目视图内部)

Maven:org.springframework.boot:spring-boot-starter-test:2.0.0.RELEASE

Maven:com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.8.1

-–杰克逊核心-2.8.1.jar

------ com.faster.xml.jackson.core

------ com.faster.xml.jackson.core.async

........(列出更多软件包)

Maven:com.mycompany.my.project:component-two-1.0.0-SNAPSHOT

Maven:com.mycompany.my.project:component-three-1.0.0-SNAPSHOT

-– com.mycompany.my.project:component-1.0.0-20181201.jar

------ BOOT-INF.classes

------ BOOT-INF.classes .com.mycompany.project.my.package.one

--------- MyClassOne

--------- MyClassTwo

------ BOOT-INF.classes .com.mycompany.project.my.package.one

------ BOOT-INF.classes .com.mycompany.project.my.package.one.alpha

------ BOOT-INF.classes .com.mycompany.project.my.package.one.bravo


阅读 738

收藏
2020-05-30

共1个答案

小编典典

听起来您正在尝试将Spring Boot应用程序用作依赖项。一般来说,不建议这样做,因为与war文件一样,Spring Boot应用程序也不打算用作依赖项。

spring启动文件说的情况如下:

如果您的应用程序包含要与其他项目共享的类,则建议的方法是将该代码移到单独的模块中。然后,您的应用程序和其他项目可以依赖单独的模块。

如果这不是一个选择,那么您将需要配置您的项目以构建应用程序jar和一个适合用作依赖项的jar。从文档的同一部分:

如果您不能按照上面的建议重新排列代码,则必须配置Spring
Boot的Maven和Gradle插件以生成一个单独的工件,该工件适合用作依赖项。可执行存档不能用作依赖项,因为可执行jar格式将BOOT-INF /
classes中的应用程序类打包。这意味着当将可执行jar用作依赖项时,找不到它们。

为了产生两个工件,一个可以用作依赖项,另一个可以执行,必须指定分类器。该分类器应用于可执行归档文件的名称,保留默认归档文件以用作依赖项。

您正在使用Maven,因此适当的配置应如下所示:

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

您的应用程序的可执行文件胖子现在将与exec分类器一起发布。可以用作依赖项的普通jar将不会被分类。

2020-05-30