• maven常用插件详解


    1. 简介

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

    2. 分类详解

    2.1:spring-boot-maven-plugin

            负责将源码和依赖、以及springboot loader相关内容打成一个包。保证打出的包能独立运行。后续有具体打包示例。

    2.2:maven-jar-plugin

            仅负责将源码打成jar包,不能独立运行。另外,可以根据你的设置,将依赖jar包路径和程序的主入口定义在所打jar包中的 MANIFEST.MF 文件里。这里只会对当前的主项目打出包,其主项目依赖的jar包则不管,常见配置如下;

    1. <plugin>
    2. <groupId>org.apache.maven.pluginsgroupId>
    3. <artifactId>maven-jar-pluginartifactId>
    4. <version>3.2.0version>
    5. <configuration>
    6. <includes>
    7. <include>
    8. **/com/**
    9. include>
    10. includes>
    11. <archive>
    12. <manifest>
    13. <addClasspath>trueaddClasspath>
    14. <classpathPrefix>lib/classpathPrefix>
    15. <useUniqueVersions>falseuseUniqueVersions>
    16. <mainClass>com.ccccit.springdockerserver.SpringDockerServerApplicationmainClass>
    17. manifest>
    18. <manifestEntries>
    19. <Class-Path>resources/Class-Path>
    20. manifestEntries>
    21. archive>
    22. <outputDirectory>${project.build.directory}/pack/outputDirectory>
    23. configuration>
    24. plugin>

    2.3:maven-dependency-plugin

           负责将各种依赖打包。也可以根据你的设置,将所打的依赖jar包输出到指定位置。maven-dependency-plugin最大的用途是帮助分析项目依赖,dependency:list能够列出项目最终解析到的依赖列表,dependency:tree能进一步的描绘项目依赖树。maven-dependency-plugin还有很多目标帮助你操作依赖文件,例如dependency:copy-dependencies能将项目依赖从本地Maven仓库复制到某个特定的文件夹下面。

          通常maven-dependency-plugin与maven-jar-plugin一块使用,可以打出当前项目包及其依赖包,但是要配置maven-dependency-plugin的输出路径,否则target无法看到依赖包。

         常见配置如下:

    1. <plugin>
    2. <groupId>org.apache.maven.pluginsgroupId>
    3. <artifactId>maven-dependency-pluginartifactId>
    4. <version>3.2.0version>
    5. <executions>
    6. <execution>
    7. <id>copy-dependenciesid>
    8. <phase>packagephase>
    9. <goals>
    10. <goal>copy-dependenciesgoal>
    11. goals>
    12. <configuration>
    13. <outputDirectory>${project.build.directory}/pack/liboutputDirectory>
    14. configuration>
    15. execution>
    16. executions>
    17. plugin>

    2.4:maven-resource-plugin

           负责将正式与测试用到的资源文件导出到指定位置。还负责用资源文件中的参数替换pom文件中对应的占位符,常用配置如下:

    1. <plugin>
    2. <groupId>org.apache.maven.pluginsgroupId>
    3. <artifactId>maven-resources-pluginartifactId>
    4. <version>3.2.0version>
    5. <configuration>
    6. <encoding>UTF-8encoding>
    7. <useDefaultDelimiters>trueuseDefaultDelimiters>
    8. configuration>
    9. <executions>
    10. <execution>
    11. <id>copy-resourcesid>
    12. <phase>packagephase>
    13. <goals>
    14. <goal>copy-resourcesgoal>
    15. goals>
    16. <configuration>
    17. <resources>
    18. <resource>
    19. <directory>src/main/resourcesdirectory>
    20. resource>
    21. resources>
    22. <outputDirectory>${project.build.directory}/pack/resourcesoutputDirectory>
    23. configuration>
    24. execution>
    25. <execution>
    26. <id>copy-binid>
    27. <phase>packagephase>
    28. <goals>
    29. <goal>copy-resourcesgoal>
    30. goals>
    31. <configuration>
    32. <resources>
    33. <resource>
    34. <directory>src/main/bindirectory>
    35. resource>
    36. resources>
    37. <outputDirectory>${project.build.directory}/pack/binoutputDirectory>
    38. configuration>
    39. execution>
    40. executions>
    41. plugin>

        
     2.5:maven-assembly-plugin

            负责打包。但是至少要指定需要打哪些内容,这个插件才能正常干活儿。

    3. 最优实践

           此处直接在start.spring.io上面配置一个spring-web项目,里面引入一个额外的jar包commons-lang来举例说明,代码如下:

    1. package com.example.demo;
    2. import org.apache.commons.lang3.StringUtils;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. import org.springframework.web.bind.annotation.GetMapping;
    6. import org.springframework.web.bind.annotation.ResponseBody;
    7. import org.springframework.web.bind.annotation.RestController;
    8. @SpringBootApplication
    9. @RestController
    10. public class DemoApplication {
    11. public static void main(String[] args) {
    12. SpringApplication.run(DemoApplication.class, args);
    13. }
    14. @ResponseBody
    15. @GetMapping("/getInfo")
    16. public String getInfo() {
    17. StringUtils.isNotBlank("```");
    18. return "555666";
    19. }
    20. }

     maven配置如下:

     

     spring-boot-maven-plugin

    打包结果如下图:

    后缀.jar的包是可执行的完整jar包,较大;

    后缀.original的包只包含当前项目jar,不包含依赖的commons-lang3的jar包。

    dependency与jar组合

    maven-dependency-plugin、maven-jar-plugin组合,打出主项目及依赖包,如果涉及resource可使用maven-resource-plugin。

        

    参考来源:

    常用maven插件介绍(收集)_普通网友的博客-CSDN博客_maven search插件

    Maven常用插件介绍及如何打一个瘦jar包_darkdragonking的博客-CSDN博客_maven插件详解

  • 相关阅读:
    了解 AI :了解 AI 方面的一些术语 (中英文对照)
    React18+Redux+antd 项目实战 JS
    【JavaEE基础与高级 第54章】Java中的转换流的使用详解
    Unity基础01——3D数学
    react利用wangEditor写评论和@功能
    android AudioRecord
    RK3568 安卓12 EC20模块NOCONN没有ip的问题(已解决)
    [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
    Linux安装redis详细教程
    JeecgBoot v3.5.5 版本发布,性能大升级版本—开源免费的低代码开发平台
  • 原文地址:https://blog.csdn.net/lixiangchibang/article/details/126817408