当前位置: 首页 > news >正文

qq音乐如何做mp3下载网站手机网站需要什么

qq音乐如何做mp3下载网站,手机网站需要什么,云南网站设计,南宁制作网站maven系列目标#xff1a;从入门开始开始掌握一个高级开发所需要的maven技能。 这是maven系列第6篇。 整个maven系列的内容前后是有依赖的#xff0c;如果之前没有接触过maven#xff0c;建议从第一篇看起#xff0c;本文尾部有maven完整系列的连接。 前面我们使用maven…maven系列目标从入门开始开始掌握一个高级开发所需要的maven技能。 这是maven系列第6篇。 整个maven系列的内容前后是有依赖的如果之前没有接触过maven建议从第一篇看起本文尾部有maven完整系列的连接。 前面我们使用maven过程中用到了一些命令如下 mvn clean mvn compile mvn test mvn package mvn install mvn install -Dmaven.test.skiptrue mvn deploy mvn help:system上面这些命令如果你玩过maven估计大家还是比较眼熟的只是大家有没有想过这些命令为什么这么写为什么-Dmaven.test.skiptrue可以跳过测试大家需要知道mvn命令背后的一些原理这就是本文的主要内容废话不多说上干货。 本文主要内容 用户自定义属性的使用 maven生命周期详解 maven插件详解 用户属性Properties的使用 项目pom.xml中有下面这样一段依赖 dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion5.2.1.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion5.2.1.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion5.2.1.RELEASE/version/dependency /dependencies大家看一下上面的配置有没有什么问题 他们的groupId和version都是一样的程序员面对与重复的代码需要提取如果是java代码中我们可以将同样的代码或者变量值提取成方法或者变量做到重用方便维护。 那么maven的pom.xml中也支持这么做 propertiesspring.grouporg.springframework/spring.groupspring.version5.2.1.RELEASE/spring.version /propertiesdependenciesdependencygroupId${spring.group}/groupIdartifactIdspring-core/artifactIdversion${spring.version}/version/dependencydependencygroupId${spring.group}/groupIdartifactIdspring-beans/artifactIdversion${spring.version}/version/dependencydependencygroupId${spring.group}/groupIdartifactIdspring-aop/artifactIdversion${spring.version}/version/dependency /dependencies大家看一下上面的代码properties位于pom.xml中的是project元素的子元素用户可以在properties中自定义一些用户属性然后可以在其他地方使用${属性名称}这种方式进行引用。 生命周期 我们开发一个项目的时候通常有这些环节创建项目、编写代码、清理已编译的代码、编译代码、执行单元测试、打包、集成测试、验证、部署、生成站点等这些环节组成了项目的生命周期这些过程也叫做项目的构建过程几乎所有的项目都由这些环节中的其中几个创建项目和编写代码是我们程序员需要多参与的其他的都可以做成自动化的方式。 用过ant的朋友回忆一下在maven出现以前开发人员每天都在对项目进行清理、编译、执行单元测试、打包、部署等操作虽然大家都在做这些工作但是没有一个统一的标准项目和项目之间公司和公司之间大多数都是各写各的写法是千奇百怪能满足自身需求就可以了但是换个项目就得从头再来这些操作又需要重新编写脚本。 而maven出来之后项目生命周期中的这些环节都被简化了被规范化了maven出现之前项目的结构没有一个统一的标准所以生命周期中各个环节对应的自动化脚本也是各种各样而maven约定好了项目的结构源码的位置、资源文件的位置、测试代码的位置、测试用到的资源文件的位置、静态资源的位置、打包之后文件的位置等这些都是maven约定好的所以清理代码用一个命令mvn clean就可以完成不需要我们去配置清理的目标目录用mvn compile命令就可以完成编译的操作用mvn test就可以自动运行测试用例用mvn package就可以将项目打包为jar、war格式的包能够如此简单主要还是maven中约定大于配置的结果。 maven中生命周期详解 maven将项目的生命周期抽象成了3套生命周期每套生命周期又包含多个阶段每套中具体包含哪些阶段是maven已经约定好的但是每个阶段具体需要做什么是用户可以自己指定的。 maven中定义的3套生命周期 clean生命周期 default生命周期 site生命周期 上面这3套生命周期是相互独立的没有依赖关系的而每套生命周期中有多个阶段每套中的多个阶段是有先后顺序的并且后面的阶段依赖于前面的阶段而用户可以直接使用mvn命令来调用这些阶段去完成项目生命周期中具体的操作命令是 mvn 生命周期阶段通俗点解释 maven中的3套生命周期相当于maven定义了3个类来解决项目生命周期中需要的各种操作每个类中有多个方法这些方法就是指具体的阶段方法名称就是阶段的名称每个类的方法是有顺序的当执行某个方法的时候这个方法前面的方法也会执行。具体每个方法中需要执行什么这个是通过插件的方式让用户去配置的所以非常灵活。 用户执行mvn 阶段名称就相当于调用了具体的某个方法。 下面我们来看看每个生命周期中有哪些阶段也就是我们说的每个类中有哪些方法顺序是什么样的。 clean生命周期 clean生命周期的目的是清理项目它包含三个阶段 生命周期阶段描述pre-clean执行一些需要在clean之前完成的工作clean移除所有上一次构建生成的文件post-clean执行一些需要在clean之后立刻完成的工作 用户可以通过mvn pre-clean来调用clean生命周期中的pre-clean阶段需要执行的操作。 调用mvn post-clean会执行上面3个阶段所有的操作上文中有说过每个生命周期中的后面的阶段会依赖于前面的阶段当执行某个阶段的时候会先执行其前面的阶段。 default生命周期 这个是maven主要的生命周期主要被用于构建应用包含了23个阶段。 生命周期阶段描述validate校验校验项目是否正确并且所有必要的信息可以完成项目的构建过程。initialize初始化初始化构建状态比如设置属性值。generate-sources生成源代码生成包含在编译阶段中的任何源代码。process-sources处理源代码处理源代码比如说过滤任意值。generate-resources生成资源文件生成将会包含在项目包中的资源文件。process-resources编译复制和处理资源到目标目录为打包阶段最好准备。compile处理类文件编译项目的源代码。process-classes处理类文件处理编译生成的文件比如说对Java class文件做字节码改善优化。generate-test-sources生成测试源代码生成包含在编译阶段中的任何测试源代码。process-test-sources处理测试源代码处理测试源代码比如说过滤任意值。generate-test-resources生成测试源文件为测试创建资源文件。process-test-resources处理测试源文件复制和处理测试资源到目标目录。test-compile编译测试源码编译测试源代码到测试目标目录.process-test-classes处理测试类文件处理测试源码编译生成的文件。test测试使用合适的单元测试框架运行测试Juint是其中之一。prepare-package准备打包在实际打包之前执行任何的必要的操作为打包做准备。package打包将编译后的代码打包成可分发格式的文件比如JAR、WAR或者EAR文件。pre-integration-test集成测试前在执行集成测试前进行必要的动作。比如说搭建需要的环境。integration-test集成测试处理和部署项目到可以运行集成测试环境中。post-integration-test集成测试后在执行集成测试完成后进行必要的动作。比如说清理集成测试环境。verify验证运行任意的检查来验证项目包有效且达到质量标准。install安装安装项目包到本地仓库这样项目包可以用作其他本地项目的依赖。deploy部署将最终的项目包复制到远程仓库中与其他开发者和项目共享。 site生命周期 site生命周期的目的是建立和发布项目站点Maven能够基于pom.xml所包含的信息自动生成一个友好的站点方便团队交流和发布项目信息。主要包含以下4个阶段 阶段描述pre-site执行一些需要在生成站点文档之前完成的工作site生成项目的站点文档post-site执行一些需要在生成站点文档之后完成的工作并且为部署做准备site-deploy将生成的站点文档部署到特定的服务器上 mvn命令和生命周期 从命令行执行maven任务的最主要方式就是调用maven生命周期的阶段需要注意的是每套生命周期是相互独立的但是每套生命周期中阶段是有前后依赖关系的执行某个的时候会按序先执行其前面所有的。 mvn执行阶段的命令格式是 mvn 阶段1 [阶段2] [阶段n]多个阶段的名称之间用空格隔开。 下面我们举一些常见的例子来说明一下 mvn clean 该命令是调用clean生命周期的clean阶段实际执行的阶段为clean生命周期中的pre-clean和clean阶段。 mvn test 该命令调用default生命周期的test阶段实际上会从default生命周期的第一个阶段validate开始执行一直到test阶段结束。这里面包含了代码的编译运行测试用例。 mvn clean install 这个命令中执行了两个阶段clean和install从上面3个生命周期的阶段列表中找一下可以看出clean位于clean生命周期的表格中install位于default生命周期的表格中所以这个命令会先从clean生命周期中的pre-clean阶段开始执行一直到clean生命周期的clean阶段然后会继续从default生命周期的validate阶段开始执行一直到default生命周期的install阶段。 这里面包含了清理上次构建的结果编译代码测试打包将打好的包安装到本地仓库。 mvn clean deploy 这个命令也比较常用会先按顺序执行clean生命周期的[pre-clean,clean]这个闭区间内所有的阶段然后按序执行default生命周期的[validate,deploy]这个闭区间内的所有阶段也就是default生命周期中的所有阶段。这个命令内部包含了清理上次构建的结果、编译代码、运行单元测试、打包、将打好的包安装到本地仓库、将打好的包发布到私服仓库。 上面说了这么多理论我们来看一下效果。 案例 创建一个maven项目 打开idea点击File-New-Project选择Maven如下 点击Next输入项目坐标信息如下 点击Next输入Project name 为maven-chat06如下 点击Finish创建成功如下 配置一下idea的maven环境点击File-Settings如下图 点击上面的OK完成配置。 还原~/.m2/settings.xml的配置到初始状态操作如下 将M2_HOME/conf/settings.xml复制到~/.m2/settings.xml目录如果存在先备份一个然后进行覆盖。maven项目是约定大于配置的项目结构是按照maven的约定生成好的关于maven约定项目结构我们再来回顾一下。 Maven 提倡使用一个共同的标准目录结构Maven 使用约定优于配置的原则大家尽可能的遵守这样的目录结构如下所示 结合刚才项目的结构和这个表格领会一下下面我们来感受一下执行生命周期中的阶段产生的效果。 修改pom.xml如下 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javacode2018/groupIdartifactIdmaven-chat06/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding!-- 配置maven编译的时候采用的编译器版本 --maven.compiler.compilerVersion1.8/maven.compiler.compilerVersion!-- 指定源代码是什么版本的如果源码和这个版本不符将报错maven中执行编译的时候会用到这个配置默认是1.5这个相当于javac命令后面的-source参数 --maven.compiler.source1.8/maven.compiler.source!-- 该命令用于指定生成的class文件将保证和哪个版本的虚拟机进行兼容maven中执行编译的时候会用到这个配置默认是1.5这个相当于javac命令后面的-target参数 --maven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency/dependencies/project上面properties这个元素中的配置可能大家看不懂先略过后面会详解。 创建一个Demo类源码是放在src/main/java目录中如下 package com.javacode2018.maven;import java.util.ArrayList; import java.util.List;public class Demo1 {public static void main(String[] args) {System.out.println(欢迎和【路人甲java】一起学习maven带你成为maven高手);ListInteger list  new ArrayList();for (int i  0; i  5; i) {list.add(i);}list.forEach(System.out::print);} }mvn clean命令效果 在当前项目pom.xml所在目录中执行下面命令 mvn clean效果如下 D:\code\IdeaProjects\maven-chat06mvn clean [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.477 s [INFO] Finished at: 2019-11-15T18:46:1308:00 [INFO] ------------------------------------------------------------------------上面有提到编译、打包的内容都放在target目录看上面输出中有个Deleting target目录说明mvn clean是对这个目录进行清理这个目录中目前是空的。 mvn compile命令效果 先看一下项目的目录中是没有target目录的如下图 cmd中执行 mvn compile输出 D:\code\IdeaProjects\maven-chat06mvn compile [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  1.897 s [INFO] Finished at: 2019-11-15T18:53:1208:00 [INFO] ------------------------------------------------------------------------可以看到上面有Compiling 1 source ....这个是编译Demo.java然后输出到了target中的classes目录再来看一下项目的结构如下图 上图中匡红的是新生成的。 mvn clean package效果 D:\code\IdeaProjects\maven-chat06mvn clean package [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test)  maven-chat06 --- [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar)  maven-chat06 --- [INFO] Building jar: D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  2.177 s [INFO] Finished at: 2019-11-15T18:56:5908:00 [INFO] ------------------------------------------------------------------------从输出中看一下有个Building jar ...生成了一个jar包这个项目的pom.xml中的packaging元素没有指定值那就取默认值jar表示这个构件是一个jar包mvn clean package先清理编译的代码然后执行了default生命周期的compile阶段将项目打成了jar放在了target目录如下图 大家看到上面还有很多其他的输出这个大家可以先忽略本文看完了都会明白的。 mvn clean install效果 D:\code\IdeaProjects\maven-chat06mvn clean install [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test)  maven-chat06 --- [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar)  maven-chat06 --- [INFO] Building jar: D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install)  maven-chat06 --- [INFO] Installing D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT.jar [INFO] Installing D:\code\IdeaProjects\maven-chat06\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  2.977 s [INFO] Finished at: 2019-11-15T19:05:2108:00 [INFO] ------------------------------------------------------------------------和mvn clean package的输出对比一下多了几行输出主要是多了2个Installing...将项目打成jar包以及项目的pom文件放到本地仓库去了也就是将构件打包安装到本地仓库了。 上面几个mvn命令的案例都是通过mvn命令去执行了mvn中定义的生命周期中的阶段然后完成了很多看似内部很复杂的操作。比如打包内部包含很多复杂的操作maven都帮我们屏蔽了通过一个简单的mvn package就完成了。 上面也有说过每个阶段具体做的事情是由maven插件来完成的。 我们在回头看一下上面一个输出中有很多类似于maven-xxxx-plugin:版本:xxx这样的内容这个就是表示当前在运行这个插件来完成对应阶段的操作mvn 阶段明明执行的是阶段但是实际输出中确实插件在干活那么阶段是如何和插件关联起来的呢插件又是什么呢 注意以下所有命令都在cmd窗口执行执行位置位于上面这个项目的pom.xml所在目录。 Maven插件 maven插件主要是为maven中生命周期中的阶段服务的maven中只是定义了3套生命周期以及每套生命周期中有哪些阶段具体每个阶段中执行什么操作完全是交给插件去干的。 maven中的插件就相当于一些工具比如编译代码的工具运行测试用例的工具打包代码的工具将代码上传到本地仓库的工具将代码部署到远程仓库的工具等等这些都是maven中的插件。 插件可以通过mvn命令的方式调用直接运行或者将插件和maven生命周期的阶段进行绑定然后通过mvn 阶段的方式执行阶段的时候会自动执行和这些阶段绑定的插件。 插件目标 maven中的插件以jar的方式存在于仓库中和其他构件是一样的也是通过坐标进行访问每个插件中可能为了代码可以重用一个插件可能包含了多个功能比如编译代码的插件可以编译源代码、也可以编译测试代码插件中的每个功能就叫做插件的目标Plugin Goal每个插件中可能包含一个或者多个插件目标Plugin Goal。 目标参数 插件目标是用来执行任务的那么执行任务肯定是有参数配的这些就是目标的参数每个插件目标对应于java中的一个类参数就对应于这个类中的属性。 列出插件所有目标 mvn 插件goupId:插件artifactId[:插件version]:help mvn 插件前缀:help上面插件前缀的先略过我们先看第一种效果。 如 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-clean-plugin:help [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:help (default-cli)  maven-chat06 --- [INFO] org.apache.maven.plugins:maven-clean-plugin:2.5Maven Clean PluginThe Maven Clean Plugin is a plugin that removes files generated at build-timein a projects directory.This plugin has 2 goals:clean:cleanGoal which cleans the build.This attempts to clean a projects working directory of the files that weregenerated at build-time. By default, it discovers and deletes the directoriesconfigured in project.build.directory, project.build.outputDirectory,project.build.testOutputDirectory, and project.reporting.outputDirectory.Files outside the default may also be included in the deletion by configuringthe filesets tag.clean:helpDisplay help information on maven-clean-plugin.Callmvn clean:help -Ddetailtrue -Dgoalgoal-nameto display parameter details.上面列出了maven-clean-plugin这个插件所有的目标有2个分别是clean:clean、clean:help分号后面的部分是目标名称分号前面的部分是插件的前缀每个目标的后面包含对这个目标的详细解释说明关于前缀的后面会有详细介绍。 查看插件目标参数列表 mvn 插件goupId:插件artifactId[:插件version]:help -Dgoal目标名称 -Ddetail mvn 插件前缀:help -Dgoal目标名称 -Ddetail上面命令中的-Ddetail用户输出目标详细的参数列表信息如果没有这个目标的参数列表不会输出出来看效果。 如 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-clean-plugin:help -Dgoalhelp -Ddetail [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:help (default-cli)  maven-chat06 --- [INFO] org.apache.maven.plugins:maven-clean-plugin:2.5Maven Clean PluginThe Maven Clean Plugin is a plugin that removes files generated at build-timein a projects directory.clean:helpDisplay help information on maven-clean-plugin.Callmvn clean:help -Ddetailtrue -Dgoalgoal-nameto display parameter details.Available parameters:detail (Default: false)If true, display all settable properties for each goal.Expression: ${detail}goalThe name of the goal for which to show help. If unspecified, all goalswill be displayed.Expression: ${goal}indentSize (Default: 2)The number of spaces per indentation level, should be positive.Expression: ${indentSize}lineLength (Default: 80)The maximum length of a display line, should be positive.Expression: ${lineLength}上面列出了clean插件的help目标的详细参数信息。 注意上面参数详细参数说明中有Expression: ${xxx}这样的部分这种表示给这个运行的目标传参可以通过mvn -Dxxx这种方式传参xxx为${xxx}中的xxx部分这个xxx有时候和目标参数的名称不一致所以这点需要注意运行带参数的目标看一下效果 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-clean-plugin:help -Dgoalhelp -Ddetailfalse [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:help (default-cli)  maven-chat06 --- [INFO] org.apache.maven.plugins:maven-clean-plugin:2.5Maven Clean PluginThe Maven Clean Plugin is a plugin that removes files generated at build-timein a projects directory.clean:helpDisplay help information on maven-clean-plugin.Callmvn clean:help -Ddetailtrue -Dgoalgoal-nameto display parameter details.[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.332 s [INFO] Finished at: 2019-11-18T15:14:5608:00 [INFO] ------------------------------------------------------------------------上面传了一个detailfalse上面未输出目标的详细参数信息。 命令行运行插件 mvn 插件goupId:插件artifactId[:插件version]:插件目标 [-D目标参数1] [-D目标参数2] [-D目标参数n] mvn 插件前缀:插件目标  [-D目标参数1] [-D目标参数2] [-D目标参数n]案例 maven中运行测试用例使用到的插件坐标是 dependencygroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion2.12.4/version /dependency我们看一下这个插件有哪些目标 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-surefire-plugin:help [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:help (default-cli)  maven-chat06 --- [INFO] Maven Surefire Plugin 2.12.4Surefire is a test framework project.This plugin has 2 goals:surefire:helpDisplay help information on maven-surefire-plugin.Call mvn surefire:help -Ddetailtrue -Dgoalgoal-name to display parameterdetails.surefire:testRun tests using Surefire.[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.662 s [INFO] Finished at: 2019-11-18T15:26:2608:00 [INFO] ------------------------------------------------------------------------maven-surefire-plugin插件有2个目标help和test描述中可以看出test目标是用来运行测试用例的。 我们看一下test目标对应的参数列表 test目标对应的参数太多我们只列出了部分参数如下 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-surefire-plugin:help -Dgoaltest -Ddetailtrue [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:help (default-cli)  maven-chat06 --- [INFO] Maven Surefire Plugin 2.12.4Surefire is a test framework project.surefire:testRun tests using Surefire.Available parameters:skip (Default: false)Set this to true to bypass unit tests entirely. Its use is NOTRECOMMENDED, especially if you enable it using the maven.test.skipproperty, because maven.test.skip disables both running the tests andcompiling the tests. Consider using the skipTests parameter instead.大家认真看一下skip这个参数说明这个参数默认是false如果设置为true的时候项目将跳过测试代码的编译和测试用例的执行可以maven.test.skip这个属性来进行命令行传参将其传递给test目标的skip属性这个通过-D传递的参数名称就和目标参数名称不一样了所以需要注意-D后面并不一定是参数名称。 我们来运行一下test目标看看效果。 先看一下不加参数的效果 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-surefire-plugin:test [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-cli)  maven-chat06 --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.640 s [INFO] Finished at: 2019-11-18T15:33:4808:00 [INFO] ------------------------------------------------------------------------加maven.skip.testtrue的效果如下 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-surefire-plugin:test -Dmaven.test.skiptrue [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-cli)  maven-chat06 --- [INFO] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.652 s [INFO] Finished at: 2019-11-18T15:34:4508:00 [INFO] ------------------------------------------------------------------------对比一下上面2个输出下面的多了一行如下 [INFO] Tests are skipped.说明跳过了测试的执行。 插件传参的2种方式 刚才上面讲了一种通过-D后面跟用户属性的方式给用户传参还有一种方式在pom.xml中properties的用户自定义属性中进行配置如下 修改项目maven-chat06的pom.xmlproperties中加入 maven.test.skiptrue/maven.test.skipcmd中运行 mvn org.apache.maven.plugins:maven-surefire-plugin:test效果如下 D:\code\IdeaProjects\maven-chat06mvn org.apache.maven.plugins:maven-surefire-plugin:test [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-cli)  maven-chat06 --- [INFO] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.638 s [INFO] Finished at: 2019-11-18T15:46:0408:00 [INFO] ------------------------------------------------------------------------输出中也有Tests are skipped.说明也跳过了测试和-Dmaven.test.skiptrue效果一样。 上面说的都是插件目标的东西那么插件目标是如何和生命周期关联起来的呢继续向下看。 获取插件目标详细描述信息的另外一种方式 mvn help:describe -Dplugin插件goupId:插件artifactId[:插件version] -Dgoal目标名称 -Ddetail mvn help:describe -Dplugin插件前缀 -Dgoal目标名称 -Ddetail上面这个命令调用的是help插件的describe这个目标这个目标可以列出其他指定插件目标的详细信息看效果 D:\code\IdeaProjects\maven-chat06mvn help:describe -Dpluginorg.apache.maven.plugins:maven-surefire-plugin -Dgoaltest -Ddetail [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-help-plugin:3.2.0:describe (default-cli)  maven-chat06 --- [INFO] Mojo: surefire:test surefire:testDescription: Run tests using Surefire.Implementation: org.apache.maven.plugin.surefire.SurefirePluginLanguage: javaBound to phase: testAvailable parameters:additionalClasspathElementsAdditional elements to be appended to the classpath.argLineUser property: argLineArbitrary JVM options to set on the command line.skip (Default: false)User property: maven.test.skipSet this to true to bypass unit tests entirely. Its use is NOTRECOMMENDED, especially if you enable it using the maven.test.skipproperty, because maven.test.skip disables both running the tests andcompiling the tests. Consider using the skipTests parameter instead.可以拿这种和上面获取插件目标参数详情列表对比一下上面这个更详细一些参数说明中多了一行User property: 属性名称这个属性名称可以通过两种方式传递 mvn命令-D属性名称的方式传递 pom.xml中properties中定义的方式指定。 现在可以大家估计可以知道我们一直用的-Dmaven.test.skip为什么可以跳过测试代码的编译和单元测试的执行了吧。 插件前缀 运行插件的时候可以通过指定插件坐标的方式运行但是插件的坐标信息过于复杂也不方便写和记忆所以maven中给插件定义了一些简捷的插件前缀可以通过插件前缀来运行指定的插件。 可以通过下面命令查看到插件的前缀 mvn help:describe -Dplugin插件goupId:插件artifactId[:插件version]示例效果 D:\code\IdeaProjects\maven-chat06mvn help:describe -Dpluginorg.apache.maven.plugins:maven-surefire-plugin [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-help-plugin:3.2.0:describe (default-cli)  maven-chat06 --- [INFO] org.apache.maven.plugins:maven-surefire-plugin:2.12.4Name: Maven Surefire Plugin Description: Surefire is a test framework project. Group Id: org.apache.maven.plugins Artifact Id: maven-surefire-plugin Version: 2.12.4 Goal Prefix: surefire输出中的Goal Prefix:部分对应的就是插件的前缀上面这个插件的前缀是surefire。 我们使用前缀来运行一下插件感受一下效果 D:\code\IdeaProjects\maven-chat06mvn surefire:test [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-cli)  maven-chat06 --- [INFO] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.934 s [INFO] Finished at: 2019-11-18T16:18:4208:00 [INFO] ------------------------------------------------------------------------上面通过别名来运行插件maven-surefire-plugin的test目标是不是简洁了很多。 上面用了很多mvn help:这个命令这个调用的是maven-help-plugin插件的功能help是插件的前缀它的坐标是 dependencygroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-help-plugin/artifactIdversion3.2.0/version /dependency插件和生命周期阶段绑定 maven只是定义了生命周期中的阶段而没有定义每个阶段中具体的实现这些实现是由插件的目标来完成的所以需要将阶段和插件目标进行绑定来让插件目标帮助生命周期的阶段做具体的工作生命周期中的每个阶段支持绑定多个插件的多个目标。 当我们将生命周期中的阶段和插件的目标进行绑定的时候执行mvn 阶段就可以执行和这些阶段绑定的插件目标。 maven内置插件以及绑定 maven为了让我们不用做任何配置就可以实现一些项目的构建操作比如运行mvn clean就可以帮我们清理代码运行mvn install就可以将构件安装到本地仓库所以maven帮我们做了一些事情maven内部已经提供了很多默认的插件而将一些阶段默认和这些插件阶段绑定好了所以我们不用做任何配置就可以执行清理代码、编译代码、测试、打包、安装到本地仓库、上传到远程仓库等阶段的操作是因为maven已经默认给这些阶段绑定好了插件目标所以不需要我们再去配置就直接可以运行这些都是maven内置绑定帮我们做的事情我们来看看maven有哪些内置绑定。 maven内置绑定 clean生命周期阶段与插件绑定关系 生命周期阶段插件:目标pre-cleancleanmaven-clean-plugin:cleanpost-clean clean周期中只有clean阶段默认绑定了maven-clean-plugin插件的clean目标。maven-clean-plugin插件的clean目标作用就是删除项目的输出目录。 default生命周期阶段与插件绑定关系 default生命周期中有23个阶段我只列出有默认绑定的其他的没有列出的没有绑定任何插件因此没有任何实际的行为。 生命周期阶段插件:目标执行任务process-resourcesmaven-resources-plugin:resources复制主资源文件至主输出目录compilemaven-compiler-plugin:compile编译主代码至主输出目录process-test-resourcesmaven-resources-plugin:testResources复制测试资源文件至测试输出目录test-compilemaven-compiler-plugin:testCompile编译测试代码至测试输出目录testmaven-surefile-plugin:test执行测试用例packagemaven-jar-plugin:jar创建项目jar包installmaven-install-plugin:install将输出构件安装到本地仓库deploymaven-deploy-plugin:deploy将输出的构件部署到远程仓库 site生命周期阶段与插件绑定关系 生命周期阶段插件:目标pre-sitesitemaven-site-plugin:sitepost-sitesite-deploymaven-site-plugin:deploy 来几个案例解说一下。 mvn clean 该命令是调用clean生命周期的clean阶段实际执行的阶段为clean生命周期中的pre-clean和clean阶段从上面内置绑定表格中找一下可以看到只有clean阶段绑定了maven-clean-plugin插件的clean目标所以运行mvn clean的时候实际上会调用maven-clean-plugin插件的clean目标来清理代码。 运行一下看一下效果 D:\code\IdeaProjects\maven-chat06mvn clean [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.408 s [INFO] Finished at: 2019-11-18T16:34:1408:00 [INFO] ------------------------------------------------------------------------上面有一行输出如下 [INFO] --- maven-clean-plugin:2.5:clean (default-clean)  maven-chat06 ---这个表示调用的插件是maven-clean-plugin版本是2.5插件的目标是clean mvn test 该命令调用default生命周期的test阶段实际上会从default生命周期的第一个阶段validate开始执行一直到test阶段结束。这里面包含了代码的编译运行测试用例。还是和上面的分析过程一样对照上面表格中的绑定关系可以得到mvn test会调用下面一些插件的目标 maven-resources-plugin:resources maven-compiler-plugin:compile maven-resources-plugin:testResources maven-compiler-plugin:testCompile maven-surefile-plugin:test我们来验证一下看看是不是和我们分析的一样 D:\code\IdeaProjects\maven-chat06mvn test [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test)  maven-chat06 --- [INFO] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  1.880 s [INFO] Finished at: 2019-11-18T16:36:5508:00 [INFO] ------------------------------------------------------------------------从上面输出中可以看到调用了5个插件的目标和分析的一样。 再来看一个跳过测试的例子如下 D:\code\IdeaProjects\maven-chat06mvn test -Dmaven.skip.testtrue [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test)  maven-chat06 --- [INFO] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  1.384 s [INFO] Finished at: 2019-11-18T16:38:5208:00 [INFO] ------------------------------------------------------------------------上面这个是不是很熟悉经常用到的跳过测试为什么这么写我想大家都知道了吧。 其他几个mvn compile、mvn install、mvn deploy建议大家也自己去玩玩加深理解。 自定义绑定 除了默认绑定的一些操作我们自己也可以将一些阶段绑定到指定的插件目标上来完成一些操作这种自定义绑定让maven项目在构件的过程中可以执行更多更丰富的操作。 常见的一个案例是创建项目的源码jar包将其安装到仓库中内置插件绑定关系中没有涉及到这一步的任务所以需要用户自己配置。 插件maven-source-plugin的jar-no-fork可以帮助我们完成该任务我们将这个目标绑定在default生命周期的verify阶段上面这个阶段没有任何默认绑定verify是在测试完成之后并将构件安装到本地仓库之前执行的阶段在这个阶段我们生成源码配置如下 在maven-chat06中的pom.xml加入如下配置 buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-source-plugin/artifactIdversion3.2.0/versionexecutions!-- 使用插件需要执行的任务 --execution!-- 任务id --idattach-source/id!-- 任务中插件的目标可以指定多个 --goalsgoaljar-no-fork/goal/goals!-- 绑定的阶段 --phaseverify/phase/execution/executions/plugin/plugins /build注意上面配置的attach-source后面输出中会有。 id任务的id需唯一如果不指定默认为default。 每个插件的配置在pom.xml的plugins元素中只能写一次否则会有警告。 最终pom.xml如下 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javacode2018/groupIdartifactIdmaven-chat06/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding!-- 配置maven编译的时候采用的编译器版本 --maven.compiler.compilerVersion1.8/maven.compiler.compilerVersion!-- 指定源代码是什么版本的如果源码和这个版本不符将报错maven中执行编译的时候会用到这个配置默认是1.5这个相当于javac命令后面的-source参数 --maven.compiler.source1.8/maven.compiler.source!-- 该命令用于指定生成的class文件将保证和哪个版本的虚拟机进行兼容maven中执行编译的时候会用到这个配置默认是1.5这个相当于javac命令后面的-target参数 --maven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-source-plugin/artifactIdversion3.2.0/versionexecutions!-- 使用插件需要执行的任务 --execution!-- 任务id --idattach-source/id!-- 任务中插件的目标可以指定多个 --goalsgoaljar-no-fork/goal/goals!-- 绑定的阶段 --phaseverify/phase/execution/executions/plugin/plugins/build/project运行下面命令 mvn install效果 D:\code\IdeaProjects\maven-chat06mvn install [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test)  maven-chat06 --- [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar)  maven-chat06 --- [INFO] [INFO] --- maven-source-plugin:3.2.0:jar-no-fork (attach-source)  maven-chat06 --- [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install)  maven-chat06 --- [INFO] Installing D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT.jar [INFO] Installing D:\code\IdeaProjects\maven-chat06\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT.pom [INFO] Installing D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT-sources.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT-sources.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  2.268 s [INFO] Finished at: 2019-11-18T16:59:1208:00 [INFO] ------------------------------------------------------------------------上面有个输出如下 maven-source-plugin:3.2.0:jar-no-fork (attach-source)  maven-chat06 ---可以看出调用了我们配置的插件生成源码jar上面的括号中的attach-source就是pom.xml中配置的任务id。 最后有个输出 [INFO] Installing D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT-sources.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT-sources.jar可以看到将源码安装到本地仓库了。 有些插件的目标默认会绑定到一些生命周期的阶段中那么如果刚好插件默认绑定的阶段和上面配置的一致那么上面phase元素可以不写了那么怎么查看插件的默认绑定呢 mvn help:describe -Dplugin插件goupId:插件artifactId[:插件version] -Dgoal目标名称 -Ddetail mvn help:describe -Dplugin插件前缀 -Dgoal目标名称 -Ddetail我们看一下插件source的jar-no-fork目标默认的绑定 D:\code\IdeaProjects\maven-chat06mvn help:describe -Dpluginsource -Dgoaljar-no-fork -Ddetail [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-help-plugin:3.2.0:describe (default-cli)  maven-chat06 --- [INFO] Mojo: source:jar-no-fork source:jar-no-forkDescription: This goal bundles all the sources into a jar archive. Thisgoal functions the same as the jar goal but does not fork the build and issuitable for attaching to the build lifecycle.Implementation: org.apache.maven.plugins.source.SourceJarNoForkMojoLanguage: javaBound to phase: package上面输出中有个Bound to phase: package表示默认绑定在了package阶段上。 我们知道3套生命周期的运行时没有依赖的但是每套中的阶段是有先后顺序的运行某个阶段的时候会先执行他前面所有的阶段。清理代码使用的是clean周期中的clean阶段编译代码用的是default周期中的compile阶段当直接运行mvn compile编译代码的时候并不会去清理代码编译代码的时候若发现文件没有变动会跳过没有变化的文件进行编译。如果我们想每次编译之前强制先清理代码我们经常这么写 mvn clean compile上面的写法是不是很熟悉运行一下看看效果 D:\code\IdeaProjects\maven-chat06mvn clean compile [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  1.666 s [INFO] Finished at: 2019-11-18T17:16:5308:00 [INFO] ------------------------------------------------------------------------还有其他方式么 我们刚才学了自定义绑定我们可以在default生命周期的第一个阶段validate绑定清理代码的插件那我们来通过自定义绑定来实现一下project-build-plugins元素中加入下面配置 plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-clean-plugin/artifactIdversion2.5/versionexecutions!-- 使用插件需要执行的任务 --execution!-- 任务中插件的目标可以指定多个 --idclean-target/idgoalsgoalclean/goal/goals!-- 绑定的阶段 --phasevalidate/phase/execution/executions /plugin运行下面命令看效果 D:\code\IdeaProjects\maven-chat06mvn compile [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (clean-target)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  1.630 s [INFO] Finished at: 2019-11-18T17:22:3708:00 [INFO] ------------------------------------------------------------------------输出中有 [INFO] --- maven-clean-plugin:2.5:clean (clean-target)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target这个表示运行了代码清理的功能进行了代码清理是不是感觉很爽不用每次都写clean了。 POM.xml插件配置详解 插件目标共享参数配置 build-plugins-plugin中配置 !-- 插件参数配置对插件中所有的目标起效 -- configuration目标参数名参数值/目标参数名 /configurationconfiguration节点下配置目标参数的值节点名称为目标的参数名称上面这种配置对当前插件的所有目标起效也就是说这个插件中所有的目标共享此参数配置。 案例 将案例中的pom.xml中的build元素修改成下面这样。 buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion2.12.4/version!-- 插件参数配置对插件中所有的目标起效 --configurationskiptrue/skip/configuration/plugin/plugins /build运行下面命令看效果 D:\code\IdeaProjects\maven-chat06mvn test [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)  maven-chat06 --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test)  maven-chat06 --- [INFO] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  1.328 s [INFO] Finished at: 2019-11-18T17:30:5808:00 [INFO] ------------------------------------------------------------------------可以看到Test are skipped说明跳过了测试到此为止跳过测试已经讲了3种了 1. mvn -Dmaven.test.skiptue 2. properties中配置maven.test.skiptrue/maven.test.skip 3. build中配置插件参数的方式上面这个配置参数方式对当前插件的所有目标有效如果想对指定的目标进行配置呢用下面的方式。 插件目标参数配置 project-build-plugins-plugin-executions-execution元素中进行配置如下 !-- 这个地方配置只对当前任务有效 -- configuration目标参数名参数值/目标参数名 /configuration上面这种配置常用于自定义插件绑定只对当前任务有效。 感受一下效果将pom.xml中的build元素改为下面内容 buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion2.12.4/versionexecutionsexecutiongoalsgoaltest/goalgoalhelp/goal/goalsphasepre-clean/phase!-- 这个地方配置只对当前任务有效 --configurationskiptrue/skip/configuration/execution/executions/plugin/plugins /build上面自定义了一个绑定在clean周期的pre-clean阶段绑定了插件maven-surefire-plugin的两个目标test和helpexecution元素没有指定id所以默认id是default。 运行下面命令见效果 D:\code\IdeaProjects\maven-chat06mvn pre-clean [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default)  maven-chat06 --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-surefire-plugin:2.12.4:help (default)  maven-chat06 --- [INFO] Maven Surefire Plugin 2.12.4Surefire is a test framework project.This plugin has 2 goals:surefire:helpDisplay help information on maven-surefire-plugin.Call mvn surefire:help -Ddetailtrue -Dgoalgoal-name to display parameterdetails.surefire:testRun tests using Surefire.[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  0.738 s [INFO] Finished at: 2019-11-18T17:41:0808:00 [INFO] ------------------------------------------------------------------------可以看到上面输出中运行了插件的两个目标和预期结果一致。 获取maven插件信息 上面我们介绍了可以通过下面命令获取插件详细介绍信息 mvn help:describe -Dplugin插件goupId:插件artifactId[:插件version] -Dgoal目标名称 -Ddetail mvn help:describe -Dplugin插件前缀 -Dgoal目标名称 -Ddetail更多maven插件的帮助文档可以参考maven的官方网站上面有详细的介绍建议大家去看看地址 http://maven.apache.org/plugins/插件解析机制 为了方便用户使用和配置插件maven不需要用户提供完整的插件坐标信息就可以解析到正确的插件不过我建议使用插件配置的时候最好还是配置完整的坐标信息不然不利于新人的理解和问题的排查。 插件仓库 与其他maven构件一样插件构件也是基于坐标存储在maven仓库中有需要的时候maven会从本地查找插件如果不存在则到远程仓库查找找到了以后下载到本地仓库然后使用。 大家回忆一下上一章讲过的pom.xml中可以配置依赖的构件的仓库地址如下 repositoriesrepositoryidmaven-nexus/idurlhttp://localhost:8081/repository/maven-public//urlreleasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository /repositories但是插件仓库的配置和这个有一点不一样插件的是在pluginRepositories-pluginRepository元素中配置的如下 pluginRepositoriespluginRepositoryidmyplugin-repository/idurlhttp://repo1.maven.org/maven2//urlreleasesenabledtrue/enabled/releases/pluginRepository /pluginRepositories看一下上面2段配置repository中的配置和pluginRepository中的子元素是一样的这个主意下就可以了。 插件的默认groupId 在pom.xml中配置插件的时候如果是官方的插件可以省略groupId。 案例 修改本篇示例中的pom.xml如下 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javacode2018/groupIdartifactIdmaven-chat06/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesbuildpluginspluginartifactIdmaven-compiler-plugin/artifactIdversion3.1/versionconfigurationcompilerVersion1.8/compilerVersionsource1.8/sourcetarget1.8/target/configuration/plugin/plugins/build/project上面用到了maven-compiler-plugin这个插件是编译代码的是maven官方提供的插件我们省略了groupId。 上面这个插件用于编译代码的编译代码的时候需要指定编译器的版本源码的版本目标代码的版本都是用的是1.8。 大家回头去看一下文章最开始的时候在properties中有几个属性值是1.8的配置这几个值默认会被maven-compiler-plugin这个插件的上面3个参数获取具体可以去看一下这个插件compile目标的参数说明。 运行下面命令 D:\code\IdeaProjects\maven-chat06mvn clean compile [INFO] Scanning for projects... [INFO] [INFO] ------------------- com.javacode2018:maven-chat06 -------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean)  maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources)  maven-chat06 --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile)  maven-chat06 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  1.692 s [INFO] Finished at: 2019-11-18T18:11:3408:00 [INFO] ------------------------------------------------------------------------可以看到可以正常运行。 上面pom.xml省略了插件的groupId配置如下 groupIdorg.apache.maven.plugins/groupIdmaven在解析该插件的时候会自动给这个插件补上默认的官方的groupId所以可以正常运行但是不建议大家这么使用容易让新手比较懵逼。 插件前缀的解析 前面说过了使用mvn命令调用插件的时候可以使用插件的前缀来代替繁琐的插件坐标的方式那么maven是如何根据插件的前缀找到对应的插件的呢 插件前缀与插件groupId:artifactId是一一对应的关系这个关系的配置存储在仓库的元数据中元数据位于下面2个xml中 ~/.m2/repository/org/apache/maven/plugins/maven-metadata-central.xml ~/.m2/repository/org/codehaus/mojo/maven-metadata-central.xml接几个图大家感受一下 也可以通过在settings.xml中配置让maven检查其他grouId上的插件元数据中前缀和插件关系的配置如下 settingspluginGroupspluginGroupcom.your.plugins/pluginGroup/pluginGroups /settingspluginGroups中有多个pluginGroup可以配置你自己插件的元数据所在的groupId然后可以通过前缀来访问你自己的插件元数据目录此处先不细说这个后面文章中讲自定义插件的时候会再次说明。 查看项目最终pom.xml文件 我们的pom.xml默认会继承maven顶级的一个父类pom.xml顶级的pom.xml中指定了很多默认的配置如生命周期中的阶段和很多插件的绑定这些如果我们想看到到哪里看呢 mvn命令在项目中执行的时候我们的pom.xml和父类的pom.xml最终会进行合并当我们的pom.xml写的比较复杂的时候最终合并之后是什么效果呢我们可以通过下面这个命令查看 mvn help:effective-pom效果 D:\code\IdeaProjects\maven-chat06mvn help:effective-pom  1.xml上面我们将命令产生的结果输出到项目的1.xml文件中了我们看一下项目的1.xml的内容 ?xml version1.0 encodingGBK? !--  -- !--                                                                        -- !-- Generated by Maven Help Plugin on 2019-11-18T18:41:4008:00            -- !-- See: http://maven.apache.org/plugins/maven-help-plugin/                -- !--                                                                        -- !--  -- !--  -- !--                                                                        -- !-- Effective POM for project                                              -- !-- com.javacode2018:maven-chat06:jar:1.0-SNAPSHOT                       -- !--                                                                        -- !--  -- project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javacode2018/groupIdartifactIdmaven-chat06/artifactIdversion1.0-SNAPSHOT/versionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesrepositoriesrepositorysnapshotsenabledfalse/enabled/snapshotsidcentral/idnameCentral Repository/nameurlhttps://repo.maven.apache.org/maven2/url/repository/repositoriespluginRepositoriespluginRepositoryreleasesupdatePolicynever/updatePolicy/releasessnapshotsenabledfalse/enabled/snapshotsidcentral/idnameCentral Repository/nameurlhttps://repo.maven.apache.org/maven2/url/pluginRepository/pluginRepositoriesbuildsourceDirectoryD:\code\IdeaProjects\maven-chat06\src\main\java/sourceDirectoryscriptSourceDirectoryD:\code\IdeaProjects\maven-chat06\src\main\scripts/scriptSourceDirectorytestSourceDirectoryD:\code\IdeaProjects\maven-chat06\src\test\java/testSourceDirectoryoutputDirectoryD:\code\IdeaProjects\maven-chat06\target\classes/outputDirectorytestOutputDirectoryD:\code\IdeaProjects\maven-chat06\target\test-classes/testOutputDirectoryresourcesresourcedirectoryD:\code\IdeaProjects\maven-chat06\src\main\resources/directory/resource/resourcestestResourcestestResourcedirectoryD:\code\IdeaProjects\maven-chat06\src\test\resources/directory/testResource/testResourcesdirectoryD:\code\IdeaProjects\maven-chat06\target/directoryfinalNamemaven-chat06-1.0-SNAPSHOT/finalNamepluginManagementpluginspluginartifactIdmaven-antrun-plugin/artifactIdversion1.3/version/pluginpluginartifactIdmaven-assembly-plugin/artifactIdversion2.2-beta-5/version/pluginpluginartifactIdmaven-dependency-plugin/artifactIdversion2.8/version/pluginpluginartifactIdmaven-release-plugin/artifactIdversion2.5.3/version/plugin/plugins/pluginManagementpluginspluginartifactIdmaven-compiler-plugin/artifactIdversion3.1/versionexecutionsexecutioniddefault-compile/idphasecompile/phasegoalsgoalcompile/goal/goalsconfigurationcompilerVersion1.8/compilerVersionsource1.8/sourcetarget1.8/target/configuration/executionexecutioniddefault-testCompile/idphasetest-compile/phasegoalsgoaltestCompile/goal/goalsconfigurationcompilerVersion1.8/compilerVersionsource1.8/sourcetarget1.8/target/configuration/execution/executionsconfigurationcompilerVersion1.8/compilerVersionsource1.8/sourcetarget1.8/target/configuration/pluginpluginartifactIdmaven-clean-plugin/artifactIdversion2.5/versionexecutionsexecutioniddefault-clean/idphaseclean/phasegoalsgoalclean/goal/goals/execution/executions/pluginpluginartifactIdmaven-resources-plugin/artifactIdversion2.6/versionexecutionsexecutioniddefault-testResources/idphaseprocess-test-resources/phasegoalsgoaltestResources/goal/goals/executionexecutioniddefault-resources/idphaseprocess-resources/phasegoalsgoalresources/goal/goals/execution/executions/pluginpluginartifactIdmaven-jar-plugin/artifactIdversion2.4/versionexecutionsexecutioniddefault-jar/idphasepackage/phasegoalsgoaljar/goal/goals/execution/executions/pluginpluginartifactIdmaven-surefire-plugin/artifactIdversion2.12.4/versionexecutionsexecutioniddefault-test/idphasetest/phasegoalsgoaltest/goal/goals/execution/executions/pluginpluginartifactIdmaven-install-plugin/artifactIdversion2.4/versionexecutionsexecutioniddefault-install/idphaseinstall/phasegoalsgoalinstall/goal/goals/execution/executions/pluginpluginartifactIdmaven-deploy-plugin/artifactIdversion2.7/versionexecutionsexecutioniddefault-deploy/idphasedeploy/phasegoalsgoaldeploy/goal/goals/execution/executions/pluginpluginartifactIdmaven-site-plugin/artifactIdversion3.3/versionexecutionsexecutioniddefault-site/idphasesite/phasegoalsgoalsite/goal/goalsconfigurationoutputDirectoryD:\code\IdeaProjects\maven-chat06\target\site/outputDirectoryreportPluginsreportPlugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-project-info-reports-plugin/artifactId/reportPlugin/reportPlugins/configuration/executionexecutioniddefault-deploy/idphasesite-deploy/phasegoalsgoaldeploy/goal/goalsconfigurationoutputDirectoryD:\code\IdeaProjects\maven-chat06\target\site/outputDirectoryreportPluginsreportPlugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-project-info-reports-plugin/artifactId/reportPlugin/reportPlugins/configuration/execution/executionsconfigurationoutputDirectoryD:\code\IdeaProjects\maven-chat06\target\site/outputDirectoryreportPluginsreportPlugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-project-info-reports-plugin/artifactId/reportPlugin/reportPlugins/configuration/plugin/plugins/buildreportingoutputDirectoryD:\code\IdeaProjects\maven-chat06\target\site/outputDirectory/reporting /project上面这个文件大家一定要认真多看几遍理解一下里面包含太多东西再重复一下上面的文件多看几遍多看几遍多看几遍要理解 课后题 留给大家2个问题 下面这个配置是干什么的给哪个插件使用的 propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding /propertiesmvn test运行测试用例的时候测试用例类名的写法默认是有规则的这些规则有人知道么从哪里可以看到这些规则如何自定义 大家可以留言或者在技术群讨论。 总结 本文内容比较多希望大家多读几遍要理解。如果有收获的帮忙分享一下你们的支持也是我不断输出的一个动力希望大家都能够学到东西
http://www.yutouwan.com/news/43996/

相关文章:

  • 网站和网页建设题目网站建设及宣传管理规定
  • 迅美网站建设网站栏目架构
  • 辽宁建网站网站开发的相关岗位
  • 徐州有哪些网站制作公司seo网站排名全选
  • 瀑布流网站源码电子商务网站的建设心得
  • 做cpa的网站源码批量优化网站软件
  • 合肥高端网站建设设计公司手机版企页网站案例
  • 手机 网站 开发每天能赚30 50元的
  • 国际交流中心网站建设与管理制度wordpress登录菜单
  • 金融企业网站源码广东事业单位网站
  • 为网站开发android客户端郑州男科医院十大排名
  • 山东临沂市需要建设网站的公司制定网站分工任务网站的建设规划
  • 请人做网站卖东西好吗贵州省建设厅建筑官方网站
  • 张店易宝网站建设做国外营销型网站设计
  • 沈阳网站建设优化企业当当网网站系统建设的意义
  • 韩国美食做视频网站有哪些谷歌搜索关键字网站
  • 免费个人主页网站Python个人网站建设论文
  • 电子商务网站建设与管理课程心得惠州seo关键词推广
  • 满分作文网站设计制作小车一教学设计
  • 怎么做响应式网站做网络平台的网站有哪些
  • 国外做美食视频网站有哪些企业所得税避税方法
  • 网站提交网址赤峰最好的网站建设公司
  • 效果好的徐州网站建设软件商城哪个好
  • 网站建设 单一来源wordpress 瀑布流模板
  • 福山区建设工程质量检测站网站小学最好的网站建设
  • 做内贸注册什么网站成都企业网站制作哪家好
  • 学做php网站沧县做网站价格
  • 广州南沙网站建设py可以做网站吗
  • 中山移动网站设计做网站有年费吗
  • 开发h5网站开发廊坊百度快照优化