springcloud手动打jar包详解

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包报错:

在这里插入图片描述

5、jar包的组成内容

在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值