1

在更改构建 jar 文件的结构后,我无法将现有 Spring-Boot 应用程序中的类导入到我的新应用程序中。

他们更改了 jar 文件,以便应用程序自己的类现在位于 BOOT-INF/classes 中,而不是 jar 文件的根目录中。

但是当我对这个 Spring-boot 应用程序有一个正常的 maven 依赖项时,我不能从这个应用程序中导入现有的类,并在我的新应用程序中导入我的新类。

在他们改变结构之前它工作得很好......

4

2 回答 2

3

这里的解决方案是重构您的代码,以便您在两个应用程序中依赖的类在单独的项目中可用。

现在,您可以通过在两个项目中导入依赖项来使用这些类:

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example-shared</artifactId>
</dependency>

确保您没有在这个新创建的共享项目中使用 Spring boot maven 插件,并且您可能也不应该使用任何 Spring boot 启动器,因为它们加载了很多您可能不需要的依赖项。

于 2016-11-16T13:52:42.893 回答
1

我发现实际上可以使用 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'
}
于 2016-12-13T19:38:59.760 回答