SpringBoot项目打包

将SpringBoot项目打包成Jar文件


maven-compiler-plugin插件

maven-compiler-plugin插件用于编译项目代码,其默认JDK版本可能不适用所有项目。通过配置插件的source和target属性,可以指定源码和目标编译的JDK版本,解决版本不匹配导致的编译问题。

maven-compiler-plugin插件的主要作用

  1. 指定JDK版本:Maven默认使用的JDK版本可能并不符合项目的实际需求,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。通过使用maven-compiler-plugin插件可以明确指定源代码所使用的JDK版本,以及编译后的类库运行的JVM版本,从而确保项目在不同环境中的一致性和稳定性。

  2. 设置编码方式:源代码的编码方式对于编译和运行环境至关重要,maven-compiler-plugin插件允许设置代码和目标代码的编码方式,以防止因编码不一致导致的编译错误或乱码问题。

  3. 优化编译过程:maven-compiler-plugin插件提供了丰富的配置选项,可以对编译过程进行细粒度的控制。例如,可以设置是否使用增量编译、是否生成调试信息等,以提高编译效率和代码质量。

    注意点

    在配置maven-compiler-plugin插件时,需要注意以下几点:

    1. 插件版本:确保使用的maven-compiler-plugin版本与Maven版本和JDK版本兼容,不同版本的插件可能具有不同的功能和配置选项。
    2. JDK版本:根据项目实际需求选择合适的JDK版本,如果项目使用了较新的Java特性,需要确保JDK版本支持这些特性。
    3. 编码方式:确保源代码文件的编码方式与maven-compiler-plugin设置的编码方式一致,以避免编码问题导致的编译错误。

    配置项

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <!-- 版本,要和jdk版本匹配 -->
                <version>3.8.1</version>
                <configuration>
                    <!-- 源码jdk版本 -->
                    <source>1.8</source>
                <!-- 目标jdk版本 -->
                <target>1.8</target>
                <!-- 编码 -->
                <encoding>UTF-8</encoding>
                <!-- 输出编译的详细细节,方便了解编译情况 -->
                <verbose>true</verbose>
                <!--
                要使compilerVersion标签生效,还需要将fork设为true,
                用于明确表示编译版本配置的可用。
                fork和executable一般搭配使用,如果省略executable并设置true,
                maven编译器插件默认选择JAVA_HOME/bin/javac二进制文件,
                如果设置了false,maven编译器插件将通过ToolProvider接口选择编译器。
                这意味着不会启动新进程,Maven正在运行的JavaVM与会进行编译。
                executable表示javac的绝对路径,默认会寻找环境变量JAVA_HOME的位置。
                executable也可以自己设置一个路径。-->
                <fork>true</fork>
                <!-- 设置外部jdk命令 -->
                <executable>${JAVA_HOME}/bin/javac</executable>
                <!-- 最小内存 -->
                <meminitial>128m</meminitial>
                <!-- 最大内存 -->
                <maxmem>512m</maxmem>
                <!-- 设置编译时jdk的版本信息 -->
                <compilerVersion>1.8</compilerVersion>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

spring-boot-maven-plugin插件

该插件是项目打包插件,可以配置打包的参数,不同参数会打出不同的jar/war包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!--使用的插件列表 。 -->
<plugins>
    <!--plugin元素包含描述插件所需要的信息。 -->
    <plugin>
        <!--插件在仓库里的group ID -->
        <groupId />
        <!--插件在仓库里的artifact ID -->
        <artifactId />
        <!--被使用的插件的版本(或版本范围) -->
        <version />
        <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。 -->
        <extensions />
        <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 -->
        <executions>
            <!--execution元素包含了插件执行需要的信息 -->
            <execution>
                <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 -->
                <id />
                <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 -->
                <phase />
                <!--配置的执行目标 -->
                <goals />
                <!--配置是否被传播到子POM -->
                <inherited />
                <!--作为DOM对象的配置 -->
                <configuration />
            </execution>
        </executions>
        <!--项目引入插件所需要的额外依赖 -->
        <dependencies>
            <!--参见dependencies/dependency元素 -->
            <dependency>
                ......
            </dependency>
        </dependencies>
        <!--任何配置是否被传播到子项目 -->
        <inherited />
        <!--作为DOM对象的配置 -->
        <configuration />
    </plugin>
</plugins>

goals的可选值

  • build-image: 将程序使用 buildpack 打包进容器镜像中。

  • build-info:生成项目的构建信息文件 build-info.properties。根据当前 MavenProject 的内容生成一个 - build-info.properties 文件

  • help:显示帮助信息。调用mvn spring-boot:help -Ddetail=true -Dgoal=以显示参数详细信息。

  • repackage:可生成可执行的jar包或war包。插件的核心goal。 默认的 goal,将普通 mvn package 打包成的 jar 重新打包成包含所有程序依赖项的可执行 jar/war 文件,并保留 mvn package 打包的 jar 为 .original 后缀

  • run:运行 Spring Boot 应用

  • start:在集成测试阶段,控制生命周期。通常用于集成测试方案中,在 mvn integration-test 阶段管理 Spring Boot 应用的生命周期。

  • stop:在集成测试阶段,控制生命周期。停止已通过 start 目标启动的应用程序。通常在 integration– test 完成后调用。

打包

将SpringBoot项目打包成Jar文件

方法一

在idea右侧的Maven工具栏里面选择要打包的项目—>点击Lifecycle—>点击package。打包好的jar文件默认会生成在左侧项目列表的target里面。

方法二

进入需要打包的项目主目录,在地址栏输入cmd,进入命令行控制台,在命令行执行以下代码。

1
mvn clean package -Dmaven.test.skip=true

注意事项

  • jdk的环境变量需要配置好
  • maven的也要加入环境变量中

运行

1
Java -jar "jar包所在路径"