• maven编译jar包时打一个瘦包,依赖包和配置文件到jar包外面


    背景

            打的jar包很大

               很多时候我们在开发的时候,maven的依赖包非常多,导致我们最后打的一个jar包有一百多MB,需要将包上传到liunx环境耗时非常久,很多时候我们并没有改变依赖包,而只是改变我们的逻辑代码,结果重新上传包的时候,这些依赖包需要重新上传一次,费时费力。

            抽取配置文件

              有时候我们将jar包上传linux环境,发现jar包依赖的配置文件(例如:application.yml)需要修改,最不好的一种方式是线下idea重新修改配置,重新打包上传,折中的一种方式是直接 vim jar包,找到配置文件,修改jar包里面的配置文件,保存退出,然后重启jar包,但是这种方式也比较麻烦。

    解决方案

            可以使用maven插件来将 项目所有的依赖包  和 配置文件 抽取到要打的jar包的外面,这样我们的一个jar包就只有 几十kb 大小,如果不涉及到更改依赖的话,上传这样一个包是非常方便的。

    因为jar包依赖的配置文件现在都在jar包的外面,所以只需要在jar包外面修改配置文件,然后重启jar包就可以生效了

    1. <plugins>
    2. <!-- 下面这些插件可以让你打一个很小的jar包 -->
    3. <!-- 所有的配置文件都抽取到了 ../conf 目录中 -->
    4. <!-- 所有的依赖包都抽取到了 dependencyJars 目录中 -->
    5. <plugin>
    6. <groupId>org.apache.maven.plugins</groupId>
    7. <artifactId>maven-jar-plugin</artifactId>
    8. <configuration>
    9. <!-- 项目resource下的以下几种目录配置文件都不打入jar包 -->
    10. <excludes>
    11. <exclude>bin/**</exclude>
    12. <exclude>config/**</exclude>
    13. <exclude>static/**</exclude>
    14. <exclude>templates/**</exclude>
    15. <exclude>*.yml</exclude>
    16. <exclude>*.xml</exclude>
    17. </excludes>
    18. <archive>
    19. <manifest>
    20. <addClasspath>true</addClasspath>
    21. <!--MANIFEST.MF 中 Class-Path 加入前缀,不需要配置,在外部命令行指定-->
    22. <classpathPrefix>dependencyJars/</classpathPrefix>
    23. <!-- jar包不包含唯一版本标识 -->
    24. <useUniqueVersions>false</useUniqueVersions>
    25. <!--指定入口类,如果程序里只有一个main方法就建议不要手动配置-->
    26. <mainClass>com.test.Main</mainClass>
    27. </manifest>
    28. <manifestEntries>
    29. <Class-Path>../conf/</Class-Path>
    30. </manifestEntries>
    31. </archive>
    32. <outputDirectory>${project.build.directory}</outputDirectory>
    33. </configuration>
    34. </plugin>
    35. <!--拷贝依赖 copy-dependencies -->
    36. <!-- 所有的依赖包都被拷贝到 dependencyJars 目录中 -->
    37. <plugin>
    38. <groupId>org.apache.maven.plugins</groupId>
    39. <artifactId>maven-dependency-plugin</artifactId>
    40. <executions>
    41. <execution>
    42. <id>copy-dependencies</id>
    43. <phase>package</phase>
    44. <goals>
    45. <goal>copy-dependencies</goal>
    46. </goals>
    47. <configuration>
    48. <outputDirectory>${project.build.directory}/dependencyJars/</outputDirectory>
    49. <overWriteReleases>false</overWriteReleases>
    50. <overWriteSnapshots>false</overWriteSnapshots>
    51. <overWriteIfNewer>true</overWriteIfNewer>
    52. </configuration>
    53. </execution>
    54. </executions>
    55. </plugin>
    56. <!--拷贝资源文件 copy-resources -->
    57. <!-- 所有的配置文件拷贝到 ../conf 目录中 -->
    58. <plugin>
    59. <groupId>org.apache.maven.plugins</groupId>
    60. <artifactId>maven-resources-plugin</artifactId>
    61. <executions>
    62. <execution>
    63. <id>copy-resources</id>
    64. <phase>package</phase>
    65. <goals>
    66. <goal>copy-resources</goal>
    67. </goals>
    68. <configuration>
    69. <encoding>UTF-8</encoding>
    70. <resources>
    71. <resource>
    72. <directory>src/main/resources</directory>
    73. </resource>
    74. </resources>
    75. <outputDirectory>${project.build.directory}/../conf</outputDirectory>
    76. </configuration>
    77. </execution>
    78. </executions>
    79. </plugin>
    80. <!-- 打包发布时,跳过单元测试 -->
    81. <plugin>
    82. <groupId>org.apache.maven.plugins</groupId>
    83. <artifactId>maven-surefire-plugin</artifactId>
    84. <configuration>
    85. <skipTests>true</skipTests>
    86. </configuration>
    87. </plugin>
    88. <!-- 删除打包出来的文件 -->
    89. <plugin>
    90. <groupId>org.apache.maven.plugins</groupId>
    91. <artifactId>maven-clean-plugin</artifactId>
    92. <configuration>
    93. <filesets>
    94. <fileset>
    95. <directory>${basedir}/conf</directory>
    96. </fileset>
    97. <fileset>
    98. <directory>${basedir}/dependencyJars</directory>
    99. </fileset>
    100. </filesets>
    101. </configuration>
    102. </plugin>
    103. <plugin>
    104. <groupId>org.apache.maven.plugins</groupId>
    105. <artifactId>maven-compiler-plugin</artifactId>
    106. <configuration>
    107. <source>8</source>
    108. <target>8</target>
    109. </configuration>
    110. </plugin>
    111. </plugins>

    效果展示:

     

  • 相关阅读:
    Html 标题标签h1-h6详解和细节分析
    docker 学习
    jQuery 树型菜单完整代码
    typescript85-class组件类型
    基于信号量与环形队列实现读写异步缓存队列
    Spring IOC中bean的生命周期
    浅析分布式锁
    [LeetCode]剑指 Offer 26. 树的子结构
    ES6中flat(),flatMap()使用方法
    Linux提权的几种常用方法
  • 原文地址:https://blog.csdn.net/lx__angel/article/details/125629343