zoukankan      html  css  js  c++  java
  • mvn打包瘦身小妙招, get!

    微服务项目越来越多,特别是一个父工程下有多个子工程这种,每次打包都发现一个包至少都有40~50M;但是实际上有的项目代码是没有多少的,那为什么打完包后还是有这么大呢?
    @

    其实就是因为打成的包是一个可执行的jar,对应的依赖jar也被打包进去了。但是对于项目来说,项目的依赖的jar就那么多,我们能不能在打包单个微服务时,不将这些依赖的jar打包进去,而是在项目运行启动的时候指定依赖jar的地址让其运行就可以了呢?

    答案是肯定的,maven改写下配置文件即可实现。话不多说,我们开始:

    直接执行打包

    这里以一个开源的项目bootdo为例,直接用idea打包

    我们可以看到,88M之多!

    我们将打包后的这个文件夹改名增加后缀“_old”,并且文件夹类型改为zip后,再使用命令解压,命令如下:

    unzip -d bootdo-2.0.0_old bootdo-2.0.0_old.zip
    

    如下图所示:

    我们点开解压后的文件,可以看到项目依赖的jar包都在BOOT-INF/lib下;后面我们将指定这个地址为项目依赖地址!

    更改mvn打包配置

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <executable>true</executable>
                        <fork>true</fork>
                        <!-- spring-boot:run 中文乱码解决 -->
                        <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                        <mainClass>com.bootdo.BootdoApplication</mainClass>
                        <layout>ZIP</layout>
                        <!--注:若是有子工程可以多个这样添加进来,我这里bootdo就是一个单独的工程所以这里我只添加一个即可 -->
                        <includes>
                            <include>
                                <groupId>com.bootdo</groupId>
                                <artifactId>bootdo</artifactId>
                            </include>
                        </includes>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    添加这些配置后,我们再次打包看下大小(注:直接package,不要先clean,因为你改了之前打包的名称,不会覆盖原有的,一旦你clean了之前你解压的文件都没了!):

    可以看到,我们打完包后只有21M的一个大小了,因为本项目包含了很多静态文件,例如图片图标啥的(其实这些都可以无损压缩下的)所以还是有20M多,但是基本已经是以前的1/4大小了;

    如何启动

    很明显,我们直接运行现在的jar包是无法运行的,我们必须告诉编译器项目运行jar的位置

    java -Dloader.path=./bootdo-2.0.0_old/BOOT-INF/lib/ -jar bootdo-2.0.0.jar
    

    如下图所示,我们指定了mvn其他依赖的位置后,就可以启动此项目了;

    小结:这是我本地的演示,那么实际到项目上时,我们可以第一次打包将需要的jar包放到指定的位置,后面jenkin部署或手动启动时,指定路径即可。是不是很简单,那就赶快尝试下吧!

    余路那么长,还是得带着虔诚上路...
  • 相关阅读:
    js 时差转换 getTimezoneOffset()
    js 验证对象是否为数组
    mac下的一些mysql操作
    mac下mysql 1045 (28000): Access denied for user 'root'@'localhost' (using password:
    canvas 画布 文字描边
    background-size: contain 与cover的区别,以及ie78的兼容写法
    tortoisegit 常见错误disconnected no supported authentication methods available(server sent: publickey)
    windows 下git 的配置安装与使用
    Spring中Bean的生命周期
    HBase--DependentColumnFilter(参考例过滤器 )详解
  • 原文地址:https://www.cnblogs.com/itiaotiao/p/13463167.html
Copyright © 2011-2022 走看看