SpringBoot的 maven 插件
2021-02-11 15:20
标签:als highlight loader 引用 生命周期 ted span 说明 plugin SpringBoot 的 Maven 插件能够以 Maven 的方式为应用提供 SpringBoot 的支持,即为 SpringBoot 应用提供了执行 Maven 操作的可能。 Spring Boot Maven plugin 的 5个 Goals: 对应 pom.xml 文件配置如下: Spring Boot Maven plugin的最主要 goal 就是 repackage,其在 Maven 的 package 生命周期阶段,能够将 mvn package 生成的软件包,再次打包为可执行的软件包,并将 mvn package 生成的软件包重命名为 *.original 基于上述配置,对一个生成Jar软件包的项目执行如下命令。 可以看到生成的两个jar文件,一个是 *.jar,另一个是 *.jar.original。 在执行上述命令的过程中,Maven首先在package阶段打包生成*.jar文件;然后执行 spring-boot:repackage 重新打包,查找 Manifest 文件中配置的 Main-Class 属性,如下所示: 注意,其中的 Main-Class 属性值为 org.springframework.boot.loader.JarLauncher; Start-Class属性值为 com.xxx.bs.SearchBsBootstrap 其中 com.xxx.bs.SearchBsBootstrap 类中定义了 main() 方法,是程序的入口。 通常,SpringBoot Maven plugin 会在打包过程中自动为 Manifest 文件设置 Main-Class 属性,事实上该属性究竟作用几何,还可以受 SpringBoot Maven plugin 的配置属性 layout 控制的,示例如下: 注意,这里的layout属性值为 ZIP。 layout属性的值可以如下: Main-Class: org.springframework.boot.loader.JarLauncher Main-Class: org.springframework.boot.loader.warLauncher Main-Class: org.springframework.boot.loader.PropertiesLauncher MODULE,将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher。 NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher。 问题描述: 我的目录结构是一个父项目,下面有三个子项目client,common,server。client是对外提供的所有接口。在将这个项目打包之后,client的包对外提供。现在的问题是别的项目依赖了这个包之后无法引用里面的普通类。并且在打包时必须先compile才能install,不然install时client会报无法引用common中的类。 因为使用了上面提到的 springboot 打包的方式,我们得明白这里的jar并不是普通意义上的 jar 包或者说不是Java中的公共类库,而是一个独立的Web应用。 实际上,这里的 jar 更应该是 war。只是由于 SpringBoot 的设计思想,应用使用了jar。 如果你的 jar 不是以服务的方式被访问,那么就完全不必使用 SpringBoot插件重新打包了,因为根本没有入口类,也不需要可执行的jar。所以针对这种情况需要视情况而定: 1. 打的包如果是一个可运行的 jar 包,那么内部的公共类库需要抽离封装到应该是公共类库的 jar 包中,这个可运行的 jar 包或者是 war 包是对外提供服务的,是无法直接依赖引用的。 2. 如果只是一个普通公共类库 jar 包,那么只需要将 pom 文件中使用 springboot repackage 打包方式修改为 maven 普通打包方式即可,即: SpringBoot的 maven 插件 标签:als highlight loader 引用 生命周期 ted span 说明 plugin 原文地址:https://www.cnblogs.com/liang1101/p/12735320.html1、说明
SpringBoot 的 Maven plugin能够将 SpringBoot 应用打包为可执行的 jar 或 war 包,然后以通常的方式如 java -jar 来运行 SpringBoot 应用。2、对应插件
3、相关配置
4、repackage 说明
mvn package spring-boot:repackage
Manifest-Version: 1.0
Implementation-Title: search-bs
Implementation-Version: 0.1.0
Archiver-Version: Plexus Archiver
Built-By: sam
Implementation-Vendor-Id: org.springframework
Spring-Boot-Version: 2.1.2.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.xxx.bs.SearchBsBootstrap
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.6.0
Build-Jdk: 1.8.0_155
5、问题解答
springboot 打 jar 包,无法引用jar包里面的类,为什么?
问题解答: