在更改构建 jar 文件的结构后,我无法将现有 Spring-Boot 应用程序中的类导入到我的新应用程序中。
他们更改了 jar 文件,以便应用程序自己的类现在位于 BOOT-INF/classes 中,而不是 jar 文件的根目录中。
但是当我对这个 Spring-boot 应用程序有一个正常的 maven 依赖项时,我不能从这个应用程序中导入现有的类,并在我的新应用程序中导入我的新类。
在他们改变结构之前它工作得很好......
在更改构建 jar 文件的结构后,我无法将现有 Spring-Boot 应用程序中的类导入到我的新应用程序中。
他们更改了 jar 文件,以便应用程序自己的类现在位于 BOOT-INF/classes 中,而不是 jar 文件的根目录中。
但是当我对这个 Spring-boot 应用程序有一个正常的 maven 依赖项时,我不能从这个应用程序中导入现有的类,并在我的新应用程序中导入我的新类。
在他们改变结构之前它工作得很好......
这里的解决方案是重构您的代码,以便您在两个应用程序中依赖的类在单独的项目中可用。
现在,您可以通过在两个项目中导入依赖项来使用这些类:
<dependency>
<groupId>org.example</groupId>
<artifactId>example-shared</artifactId>
</dependency>
确保您没有在这个新创建的共享项目中使用 Spring boot maven 插件,并且您可能也不应该使用任何 Spring boot 启动器,因为它们加载了很多您可能不需要的依赖项。
我发现实际上可以使用 Spring Boot 应用程序作为依赖项。即使它很可能不推荐。但在某些情况下,它只会让它变得更容易。此解决方案意味着您不能使用可执行存档。
“可执行存档不能用作依赖项,因为可执行 jar 格式将应用程序类打包在 BOOT-INF/classes 中。这意味着将可执行 jar 用作依赖项时找不到它们。”
我的问题的解决方案是在 spring-boot-maven-plugin 中包含一个配置分类器。对 Maven 来说是这样的:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
或者像 Gradle 这样的:
bootRepackage {
classifier = 'exec'
}