SpringBoot打包的两种方式

date
Dec 23, 2021
slug
springboot-package
status
Published
tags
Java
Springboot
summary
SpringBoot
type
Post

常规整体打包

Maven的默认打包插件用的是spring-boot-maven-plugin,这个插件会把项目中的代码和相关依赖一起打包成一个jar包,我们拿到这个jar包就可以去生产环境运行。 在使用IDEA时,我们可以执行maven-> Plugins -> install 即可

代码和依赖分别打包

以上方式当我们每次进行项目更新的时候,这个jar都特别大,因为包含了所有的依赖。因此我们需要把打包模式修改成,所有的lib文件都放在生成目录的lib/文件夹下,生成的项目jar包里面只包含项目代码部分。
所以我们在不更改pom文件的情况下,可以直接把代码达成jar包方式来运行 第一个插件是指定jar包的启动类,还有lib文件目录,代码如下:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-jar-plugin</artifactId>
     <configuration>
         <archive>
             <manifest>
                 <addClasspath>true</addClasspath>
                 <classpathPrefix>lib/</classpathPrefix>
                 <mainClass>com.remember5.demo.Application</mainClass>
             </manifest>
         </archive>
     </configuration>
  </plugin>
上面代码中classpathPrefix代表了lib文件目录,mainClass是jar包的启动类 第二个插件是maven-dependency-plugin,他的功能是把所有的依赖文件都复制到lib文件夹下,代码如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
        </execution>
    </executions>
</plugin>
outputDirectory字段就是代表依赖jar包复制的目录

单独的jar包如何打包

 
在lib里的jar包是独立的情况,在 pom.xml 下 添加以下代码 添加红色的部分,就会把lib打进去
项目结构
notion image
 
<build>
	<plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
        </plugins>
	<resources>
</build>
 
第二个种方式 (可能有问题
<build>
	<resource>
        <directory>src/main/resources</directory>
    </resource>
    <resource>
        <directory>lib</directory>
        <targetPath>BOOT-INF/lib/</targetPath>
        <includes>
            <include>*.jar</include>
        </includes>
    </resource>
	</resources>
</build>
 

Maven父子项目打包

父项目
<project>

	<modules>
		<module>demo</module>
	</modules>

	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
子项目
<project>

	<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
				<spring-boot.version>2.2.0.RELEASE</spring-boot.version>
    </properties>

	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
										<!-- 启动类 -->
                    <mainClass>com.remember.demo.Application</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
在父项目中执行打包 package
notion image
 
资料
 

© WangJiaHao 2022