如何从 Spring Boot 项目创建 jar,这个 jar 我们想在另一个 Spring Boot 应用程序中使用?

Posted

技术标签:

【中文标题】如何从 Spring Boot 项目创建 jar,这个 jar 我们想在另一个 Spring Boot 应用程序中使用?【英文标题】:how to create jar from spring boot project , this jar we want to use in another spring boot app? 【发布时间】:2018-06-28 11:52:24 【问题描述】:

我们计划创建一个spring boot项目,我们将其创建为jar文件,这个jar我们将用作另一个spring boot应用程序的依赖项,重点是第一个jar必须包含我们编写的类及其相关的jar文件,有可能吗?有没有人可以帮助我们。

问题是当我创建 jar 时,只有我编码的类被打包到 jar 中,而不是该应用程序的依赖项

【问题讨论】:

不管是不是spring boot应用,任何基于java的应用都可以做成jar。运行gradle fatJar 任务。这将创建一个包含所有依赖项的 jar 【参考方案1】:

只需使用spring-boot-maven-pluginspring-boot-gradle-plugin,具体取决于您的构建系统。这些插件的用途正是您的用例。

春季指南是开始探索的好地方:Maven Guide、Gradle Guide。

唯一需要注意的是,您要从此类共享库中排除 tomcat 内部容器:

马文:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- ... -->
</dependencies>

分级:

dependencies 
    compile("org.springframework.boot:spring-boot-starter-web")
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
    ...

【讨论】:

我用更适合初学者的信息更新了我的答案。 我创建了一个类,其中一个方法用 @Scheduled 注释,我将生成的这个应用程序添加到另一个 spring boot 中,但是当我启动 spring boot 时“@Scheduled”方法没有运行我在哪个类路径中添加了生成的 jar 的应用程序,可能是什么问题? 我建议为您的新问题创建单独的 SO 问题。使用代码 sn-ps。【参考方案2】:

你可以通过使用“maven shade”插件来创建一个Fat jar,也称为父项目的uber-jar,你想在子项目中使用它。这个 Fat jar 包含您编写的代码以及项目的所有依赖项。您可以在此处查看更多详细信息:https://maven.apache.org/plugins/maven-shade-plugin/index.html。创建的 Fat jar 将放置在您的本地存储库中。

在您的子项目中,您可以通过指定以下属性将父项目用作依赖项:

<dependency>
  <groupId>parent_project_group_id</groupId>
  <artifactId>parent_project_artifact_id</artifactId>
  <version>parent_project_version</version>
<dependency>

确保您使用 maven shade 插件而不是 spring boot 默认插件构建父项目。此外,在构建父项目时使用“全新安装”作为目标。

【讨论】:

以上是关于如何从 Spring Boot 项目创建 jar,这个 jar 我们想在另一个 Spring Boot 应用程序中使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将外部jar文件传递给spring boot项目? [复制]

如何在spring boot gradle项目中将时间戳附加到jar?

使用 Spring Boot 从 Gradle 多模块项目构建的 Jar 不起作用

spring-boot Maven:如何使用主类创建可执行 jar?

如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars

如何在 IntelliJ IDEA 中为 Spring Boot 项目构建 jar 工件