1、springcloud项目打包步骤
父项目pom.xml文件中添加的内容
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.6.RELEASE</version>
</plugin>
<plugin>
<!-- 用下面插件的来给java进行编译的 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!-- 将会使用指定的 JDK 版本将 java 文件编译为 class 文件(针对编译运行环境) -->
<source>8</source>
<!-- 将会使用指定的 JDK 版本对源代码进行编译(针对编译运行环境)-->
<target>8</target>
</configuration>
</plugin>
</plugins>
<!-- 将资源文件打包进去(各种xml,properties,xsd文件)-->
<resources>
<resource>
<!-- 指定文件路径 -->
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<!-- **表示任意级目录,*表示任意文件 -->
<include>**/*</include>
</includes>
</resource>
</resources>
</build>
子项目中加的内容
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定man函数,也就是程序入口 -->
<mainClass>com.make.study.MyBoot</mainClass>
</configuration>
<executions>
<execution>
<goals>
<!-- 设置打包目标 -->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 多配置环境下进行过滤,prod,test,dev过滤 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
2、打jar包问题详解:
2.1、为什么要指定mainClass
2.1.1、mainClass标签
我们打包项目时,如果类中项目内有两个带有main方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在类都没有使用@SpringBootApplication注解),那么就无确定程序的入口mainClass
所以我们需要手动在打包的时候指定程序入口,然后这里的设置也对应打包后的清单文件(MANIFEST.MF)
2.1.1、layout属性
layout属性的值可以如下
- JAR,即通常的可执行jar,清单文件中应该是Main-Class: org.springframework.boot.loader.JarLauncher
- WAR,即通常的可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided
- ZIP,即DIR,类似于JAR,Main-Class: org.springframework.boot.loader.PropertiesLauncher
- MODULE,将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher。
- NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher。
layout属性默认不需要配置,插件会自动推断。
2.2、打包目标goal标签
2.2.1、maven的打包目标:
- spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.original
- spring-boot:run,运行Spring Boot应用
- spring-boot:start,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
- spring-boot:stop,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
- spring-boot:build-info,生成Actuator使用的构建信息文件build-info.properties
2.2.2、打包剔除依赖等
2.3、打包的filtering标签
打包时替换文件中的替换文件名,也能替换文件里面的标识符.
当我们在项目中配置了多种环境时:
pom文件:
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>
yml文件中:
spring:
profiles:
active: @profileActive@
那么设置filtering为true可以将@profileActive@在打包后替换成对应的环境变量名。比如dev
如果不开启这个那么启动jar包报错: