文章目录
  1. 1. maven-compiler-plugin
  2. 2. maven-resources-plugin
  3. 3. maven-source-plugin
  4. 4. maven-javadoc-plugin
  5. 5. maven-jar-plugin
  6. 6. maven-deploy-plugin
  7. 7. maven-shade-plugin
  8. 8. maven-assembly-plugin
  9. 9. maven-surefire-plugin
  10. 10. exec-maven-plugin
  11. 11. 参考

使用Maven构建项目,经常会在POM文件build标签中用到各种plugin,这里就整理一下经常使用到的插件的用途。

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

用户可以通过两种方式调用Maven插件目标。第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。

maven-compiler-plugin

用来编译项目,可以指定编译时的JDK版本、编码方式等。包含两个目标:compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

maven-resources-plugin

为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件。默认的主资源文件目录是src/main/resources,很多用户会需要添加额外的资源文件目录,这个时候就可以通过配置maven-resources-plugin来实现。此外,资源文件过滤也是Maven的一大特性,你可以在资源文件中使用${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。

maven-source-plugin

生成源码包

maven-javadoc-plugin

生成JavaDoc文档。

maven-jar-plugin

进行打包,只包含了编译生成的.class文件和项目资源文件,不可以直接运行。

maven-deploy-plugin

发布插件

maven-shade-plugin

除了前面提到了常规JAR包、WAR包,源码包和Javadoc包,另一种常被用到的包是在命令行可直接运行的CLI(Command Line)包。默认Maven生成的JAR包只包含了编译生成的.class文件和项目资源文件,而要得到一个可以直接在命令行通过java命令运行的JAR文件,还要满足两个条件:

  1. JAR包中的/META-INF/MANIFEST.MF元数据文件必须包含Main-Class信息。
  2. 项目所有的依赖都必须在Classpath中。

maven-shade-plugin插件能帮助用户完成上述任务,它可以让用户配置Main-Class的值,然后在打包的时候将值填入/META-INF/MANIFEST.MF文件。

maven-assembly-plugin

maven-assembly-plugin的用途是制作项目分发包,该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等。 maven-assembly-plugin支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的,例如用户可以 按文件级别的粒度、文件集级别的粒度、模块级别的粒度、以及依赖级别的粒度控制打包,此外,包含和排除配置也是支持的。maven-assembly- plugin要求用户使用一个名为assembly.xml的元数据文件来表述打包,它的single目标可以直接在命令行调用,也可以被绑定至生命周期。

maven-surefire-plugin

surefire 插件用来在maven构建生命周期的test phase执行一个应用的单元测试。只要测试类遵循通用的命令约定(以Test结尾、以TestCase结尾、或者以Test开头),就几乎不用知晓该插件的存在。然而在当你想要跳过测试、排除某些 测试类、或者使用一些TestNG特性的时候,了解maven-surefire-plugin的一些配置选项就很有用了。

exec-maven-plugin

exec-maven-plugin很好理解,顾名思义,它能让你运行任何本地的系统程序,在某些特定情况下,运行一个Maven外部的程序可能就是最简单的问题解决方案,这就是exec:exec的 用途,当然,该插件还允许你配置相关的程序运行参数。除了exec目标之外,exec-maven-plugin还提供了一个java目标,该目标要求你 提供一个mainClass参数,然后它能够利用当前项目的依赖作为classpath,在同一个JVM中运行该mainClass。有时候,为了简单的 演示一个命令行Java程序,你可以在POM中配置好exec-maven-plugin的相关运行参数,然后直接在命令运行 mvn exec:java 以查看运行效果。

参考

  1. Maven-Available Plugins
  2. MojoHaus Maven Plugins Project
  3. 常用Maven插件介绍
  4. Maven实战(九)——打包的技巧
文章目录
  1. 1. maven-compiler-plugin
  2. 2. maven-resources-plugin
  3. 3. maven-source-plugin
  4. 4. maven-javadoc-plugin
  5. 5. maven-jar-plugin
  6. 6. maven-deploy-plugin
  7. 7. maven-shade-plugin
  8. 8. maven-assembly-plugin
  9. 9. maven-surefire-plugin
  10. 10. exec-maven-plugin
  11. 11. 参考