当前位置:   article > 正文

spring boot maven打包jar包太大,怎么办?这个方法解决你的烦恼_打包后的jar包很大

打包后的jar包很大

在springboot maven项目中,有两种打包方式,一种是war包,一种是jar,今天我们讲一下jar的打包方式。但是在jar包打包只要我们发现,我们的项目jar太大了,每次上传到服务器的时候非常的慢,接下来我们就来解决一下这个问题,让jar包也能先war包一样,不用每次都上传那么大的jar。

maven项目正常打jar包流程

1、检查各项配置,查看pom.xml 文件信息

maven正常打包 build配置
在这里插入图片描述

<build>
    <finalName>fuled-oss</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.2.6.RELEASE</version>
        <configuration>
          <fork>true</fork>
          <includeSystemScope>true</includeSystemScope>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.4.2</version>
        <configuration>
          <skipTests>true</skipTests>
        </configuration>
      </plugin>
    </plugins>
  </build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2、clean

maven打包之前我们一般都会清理一下本地缓存
在这里插入图片描述

3、打包

接下来我们就可以开始打包了,双击
在这里插入图片描述

4、打包成功

这就是我们打包成功的文件,我们可以打开对应的文件位置看一下
在这里插入图片描述我们可以看见,刚刚打包的jar有九十几M,这还是小的项目,依赖不多,一般稍微大一点的项目都会一百多,甚至两三百或者更大,我们上传到服务器时非常麻烦,因为这个jar包里面包含了我们pom文件里面我们引入的所有的依赖,所以会很大。
在这里插入图片描述

改造pom文件,将引入的第三方依赖和代码分开

1、pom 文件 properties标签添加

<properties>
    <env.LEARN_HOME>./target/oss</env.LEARN_HOME>
    <!--依赖输出目录-->
    <output.dependence.file.path>lib/</output.dependence.file.path>
    <!--jar输出目录-->
    <output.jar.file.path>bin/</output.jar.file.path>
    <!--配置文件输出目录-->
    <output.resource.file.path>config/</output.resource.file.path>
  </properties>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、build 标签去掉原来的 plugin标签,添加一下内容

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <!--${env.LEARN_HOME}为项目配置的环境变量,下同-->
          <outputDirectory>${env.LEARN_HOME}/${output.jar.file.path}</outputDirectory>
          <!-- 将配置文件排除在jar包 -->
          <excludes>
            <exclude>*.properties</exclude>
            <exclude>*.yml</exclude>
            <exclude>*.xml</exclude>
            <exclude>*.txt</exclude>
          </excludes>
          <archive>
            <!-- 生成的jar中,包含pom.xml和pom.properties这两个文件 -->
            <addMavenDescriptor>true</addMavenDescriptor>
            <!-- 生成MANIFEST.MF的设置 -->
            <manifest>
              <!--这个属性特别关键,如果没有这个属性,有时候我们引用的包maven库 下面可能会有多个包,并且只有一个是正确的,
              其余的可能是带时间戳的,此时会在classpath下面把那个带时间戳的给添加上去,然后我们 在依赖打包的时候,
              打的是正确的,所以两头会对不上,报错。 -->
              <useUniqueVersions>false</useUniqueVersions>
              <!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
              <addClasspath>true</addClasspath>
              <!-- MANIFEST.MF 中 Class-Path 各个依赖加入前缀 -->
              <!--这个jar所依赖的jar包添加classPath的时候的前缀,需要 下面maven-dependency-plugin插件补充-->
              <!--一定要找对目录,否则jar找不到依赖lib,前边加../是因为jar在bin下,而bin与lib是平级目录-->
              <classpathPrefix>../${output.dependence.file.path}</classpathPrefix>
              <!--指定jar启动入口类 -->
              <mainClass>com.zshx.fuled.oss.OssApplication</mainClass>
            </manifest>
            <manifestEntries>
              <!-- 假如这个项目可能要引入一些外部资源,但是你打包的时候并不想把 这些资源文件打进包里面,这个时候你必须在
              这边额外指定一些这些资源文件的路径,假如你的pom文件里面配置了 <scope>system</scope>,就是你依赖是你本地的
              资源,这个时候使用这个插件,classPath里面是不会添加,所以你得手动把这个依赖添加进这个地方 -->
              <!--MANIFEST.MF 中 Class-Path 加入自定义路径,多个路径用空格隔开 -->
              <!--此处resources文件夹的内容,需要maven-resources-plugin插件补充上-->
              <Class-Path>../${output.resource.file.path}</Class-Path>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>

      <!-- 复制依赖的jar包到指定的文件夹里 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <!-- 拷贝项目依赖包到指定目录下 -->
              <outputDirectory>${env.LEARN_HOME}/${output.dependence.file.path}</outputDirectory>
              <!-- 是否排除间接依赖,间接依赖也要拷贝 -->
              <excludeTransitive>false</excludeTransitive>
              <!-- 是否带上版本号 -->
              <stripVersion>false</stripVersion>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- 用于复制指定的文件 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <!-- 复制配置文件 -->
          <execution>
            <id>copy-resources</id>
            <phase>package</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>src/main/resources</directory>
                  <includes>
                    <!--将如下格式配置文件拷贝-->
                    <exclude>*.properties</exclude>
                    <exclude>*.yml</exclude>
                    <exclude>*.xml</exclude>
                    <exclude>*.txt</exclude>
                  </includes>
                </resource>
              </resources>
              <!--输出路径-->
              <outputDirectory>${env.LEARN_HOME}/${output.resource.file.path}</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </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
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100

这里面所有的plugin 都有注解,可以自己看看,不想看的直接复制粘贴。

特别注意 指定jar启动入口类,要改成自己的

接下来我们再按正常流程打包。
我们会发现我们指定的根目录target下面多了一个oss文件,这个文件就是我们想要的。在这里插入图片描述
这个文件下有三个文件
bin:是我们代码的jar包
config:是我们resources下面的配置文件
lib:是我们pom文件引入的第三方依赖

这样我们以后只要不添加或者删除pom文件里面的依赖,就可以只上传bin文件下的jar,这个jar包是我们的代码依赖,非常小的,一般就几兆。
在这里插入图片描述

3、启动项目

启动项目跟原来的没什么区别,一样的 java -jar 就可以启动了,想看linux服务器jave项目启动配置的可以看我的另外一篇文字
linux 创建 java jar包启动脚本

java -jar 运行jar包基础参数配置

提一嘴,上传到服务器时要把整个文件上传上去,而且不能修改文件名,比如我这个是oss,要把oss整个文件上传上去,而且不能修改oss这个文件名称,因为pom已经指定了,虽然我没有测试过,有时间你们可以测一下

好了今天的分享就到这里了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/376294
推荐阅读
相关标签
  

闽ICP备14008679号