这是与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.alpha
------ BOOT-INF.classes .com.mycompany.project.my.package.one.bravo
听起来您正在尝试将Spring Boot应用程序用作依赖项。一般来说,不建议这样做,因为与war文件一样,Spring Boot应用程序也不打算用作依赖项。
在spring启动文件说的情况如下:
如果您的应用程序包含要与其他项目共享的类,则建议的方法是将该代码移到单独的模块中。然后,您的应用程序和其他项目可以依赖单独的模块。
如果这不是一个选择,那么您将需要配置您的项目以构建应用程序jar和一个适合用作依赖项的jar。从文档的同一部分:
如果您不能按照上面的建议重新排列代码,则必须配置Spring Boot的Maven和Gradle插件以生成一个单独的工件,该工件适合用作依赖项。可执行存档不能用作依赖项,因为可执行jar格式将BOOT-INF / classes中的应用程序类打包。这意味着当将可执行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将不会被分类。
exec