Java Can';t导入类,IntelliJ显示BOOT-INF前缀,它似乎是相关的

Java Can';t导入类,IntelliJ显示BOOT-INF前缀,它似乎是相关的,java,maven,spring-boot,intellij-idea,package,Java,Maven,Spring Boot,Intellij Idea,Package,这就是Java和Maven——我正在尝试从一个项目导入一些类,我可以在我的机器上构建这些类到本地mvn存储库,也可以从公司的外部mvn存储库(已经是打包的jar)下载它们。在查看“外部库”和扩展相关库时,我注意到在左侧“项目”窗格中查看IntelliJ时,jar下面的所有类都有一个“BOOT-INF.classes”前缀。如果有帮助的话,这也是一个springboot项目,尽管我可以从外部存储库导入所有springboot类和所有其他类 (位于“外部库”下左窗格中IntelliJ项目视图的内部)

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

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

Maven:org.springframework.boot:springbootstarter测试:2.0.0.RELEASE

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

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

---------我的二班

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

听起来您正试图使用Spring启动应用程序作为依赖项。一般来说,不建议这样做,因为与war文件一样,Spring引导应用程序不打算用作依赖项

报告说:

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

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

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

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

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

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <classifier>exec</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>
jar {
    enabled = true
}

bootJar {
    classifier = 'exec'
}

无论使用哪种构建系统,应用程序的可执行fat jar现在都将使用
exec
分类器发布。可以用作依赖项的普通jar将不被分类。

您可以忽略build spring boot maven插件,然后创建一个简单的jar。

gradle配置会是什么样子?@Chris94我已经用等效的gradle配置更新了答案