MAVEN —— 常用插件

  • 目录

前言

  • 以前我对maven插件没什么概念,以为什么都是现成的本就应该是这样的,是理所当然的,所以导致很混乱不知道插件做了什么。以下是个人的理解,如有不对,希望指正。
  • 首先maven默认提供了写插件,及生命周期(这两个什么关系?)。我们经常用的clean,install,deploy等方法都是maven帮我们默认实现的方法。但是我们的需求可能是多样的,而maven只提供了一种默认的实现,我们需要其它的附加功能怎么办?比如install命令,maven帮我们将代码编译成了一般jar,但是我们可能需要的是可执行jar包或者包含所有依赖的jar怎么办?这时候就可以引入其它的插件类似于spring-boot-maven-plugin,通过相应的配置就会帮我们实现生成一个可执行的jar。
  • 所以明确你的需求,了解maven命令的效果,根据需求去查找相应的插件,所有的操作与结果都不是理所当然的。

spring-boot-maven-plugin

  • spring-boot-maven-plugin 官方文档

功能1:可以打成直接运行的Jar包

  • maven项目的pom.xml中,添加了org.springframework.boot:spring-boot-maven-plugin
    插件,当运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“Java -jar”命令就可以直接运行。

功能2: 将引用的包打包到内部

  • 一般的maven项目的打包命令,是生成一般包,不会把依赖的jar包也打包进去的,只是会放在jar包的同目录下,能够引用就可以了,但是spring-boot-maven-plugin插件,会将依赖的jar包全部打包进去。
    spring-boot-maven-plugin插件在打Jar包时会引入依赖包

configuration

指定启动类 mainclass

  • 可执行jar需要指定启动类,通过mainclass属性指定启动类,默认执行的是org.springframework.boot.loader.JarLauncher,所以需要修改为自己的。

classifier 分类器

  • classifier 是jar包名最后跟的一个字符信息。如下在打包的时候配置了该参数则生成的可执行jar包名就会带该classifier信息,如下得sponge-excelreport-web-1.0-SNAPSHOT-exec.jar。当然如果一般jar也是这样命名的,引入该jar依赖的时候也需要添加该分类器属性否则会找不到。

goals

  • goals默认是repackage 类型,其它的暂时未了解,用到再详细记录

repackage

  • 重复打包一个可执行的jar包。

问题及解决

问题1

  • 问题:在多模块项目的情况下,把该插件加到parent的module中会对所有的子module生效,就会导致所有的子module都会生成可执行jar。由于可执行jar的名称默认同一般jar包名称一致会导致一般jar包被覆盖删除,如果该module是被其它module引用的(只有一般jar可以实现被引用,可执行jar格式不对不行),则会报出找不到class等错误。
  • 解决方案1:将该插件只加入到具体的module中,不要加到parent的module中。这也是最常用的解实现方案。
  • 解决方案2:添加classifier 属性,可执行jar包的名称就同一般jar不一致避免重名覆盖删除问题。


    org.springframework.boot
    spring-boot-maven-plugin
    
        org.sponge.xxx.XxxxApplication
        exec
    
     
      
      
      repackage 
       
       
       


你可能感兴趣的:(maven,maven,插件,打包)