Maven插件URL:http://maven.apache.org/pluginsjava
Maven 的核心 仅仅定义了抽象的生命周期,具体任务由 插件完成,插件以独立的构件形式存在。apache
为了能复用代码,一个插件能完成多个任务。插件中的每一个功能就是一个插件目标。bash
Maven会区别对待依赖的远程仓库和插件的远程仓库。当依赖不存在时,回去远程查找。可是插件不在本地仓库时,不会去远程查找服务器
Maven的生命周期的阶段和插件相互绑定,以完成实际的构建任务。maven
生命周期阶段 | 插件目标 | 具体任务 |
---|---|---|
clean | maven-clean-plugin:clean | 删除项目的输出文件 |
site | maven-site-plugin:site | 生成项目站点 |
site-deploy | maven-site-plugin:deploy | 将项目站点部署到远程服务器上 |
process-resources | maven-resources-plugin:resources测试 |
复制主资源文件到主输出目录 |
compile | maven-compiler-plugin:compile | 编译主代码到主输出目录 |
process-test-resources | maven-resources-plugin:testResources | 复制测试资源文件到测试输出目录 |
test-compile | maven-compiler-plugin:testCompile | 编译测试代码到测试输出目录 |
test | maven-surefire-plugin:test | 执行测试用例 |
packageui |
maven-jar-plugin:jar | 建立项目jar包 |
install | maven-install-plugin:install | 将项目输出构件安装到本地仓库 |
deploy | maven-deploy-plugin:deploy | 将项目输出构件部署到远程仓库 |
Maven 插件有些 内置绑定,能够直接运行,也能够根据自身须要将某个插件目标绑定到生命周期短某个阶段上。url
建立项目源码的Jar包spa
<build> <plugins> <!--插件--> <plugin> <!--插件的groupId,插件默认 groupId 为 org.apache.maven.plugins 可忽略--> <groupId>org.apache.maven.plugins</groupId> <!--插件的artifactId--> <artifactId>maven-sources-plugin</artifactId> <!--插件版本--> <version>2.1.1</version> <!--配置多个执行任务--> <executions> <!--执行任务--> <execution> <!--任务ID自定义--> <id>attach-sources</id> <!--生命周期阶段(任务执行阶段)各个插件有默认阶段--> <phase>package</phase> <!--指定要执行的多个插件目标--> <goals> <!--插件目标--> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> <plugins> </build>
能够使用命令查看插件详情--使用的是插件 maven-help-plugin,其目标前缀 help插件
#查看插件详情.找到要查看的插件目标 其中 bound to parse 表示目标默认绑定的生命周期阶段 mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin:3.6.1 -Ddtail #显示信息的目标前缀 Goal Prefix 其做用是方便的在命令行直接运行 mvn help:describe -Dplugin=compiler #直接获取最新版本信息 mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin #仅仅描述某个插件目标的信息,能够加上 goal 参数 mvn help:describe -Dplugin=compiler -Dgoal=compile
当插件目标被绑定到不一样的生命阶段的时候,其执行顺会由生命周期阶段的前后顺序执行。
当多个插件目标绑定到同一个生命阶段的时候,这些插件的声明顺序决定了目标的执行顺序。
1.命令行插件配置(一次性),能够在Maven命令中使用 -D参数,并伴随一个参数键=参数值的形式,来配置插件目标的参数
mvn install -Dmaven.test.skip=true #跳过测试 maven.test.skip 是由该插件的参数的表达式 Expression 决定的
2.POM中插件的全局配置
<project> ... <build> <plugins> <plugin> <groupId>插件groupId</groupId> <artifactId>插件Id</artifactId> <!--插件全局配置--> <configuration> <source>编译java版本</source> <target>生成字节码的java版本</target> </configuration> </plugin> </plugins> </build> </project>
插件任务配置
<build> <plugins> <!--插件--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.3</version> <executions> <execution> <id>ant-validate</id> <phase>validate</phase> <goals> <!--插件目标--> <goal>run</goal> </goals> <configuration> <tasks> <echo>I`m bound to Validate phase</echo> </tasks> </configuration> </execution> <execution> <id>ant-verify</id> <phase>verify</phase> <goals> <!--插件目标--> <goal>run</goal> </goals> <!--配置一个echo ant 任务,向命令行输出一段文字--> <configuration> <tasks> <echo>I`m bound to Verify phase</echo> </tasks> </configuration> </execution> </executions> </plugin> <plugins> </build>
从命令行调用插件
mvn -h #显示 mvn 的命令帮助
插件仓库,
内置的插件远程仓库默认配置。
<project> ..... <!--声明远程仓库--> <pluginRepositories> <!--声明一个或者多个repository元素(远程仓库)--> <pluginRepository> <!--Maven 默认插件远程仓库 id 为central,一样的仓库ID会覆盖--> <id>central</id> <name>Maven Plugin Repository</name> <url>http://repo1.maven.org/maven2</url> <!--控制快照版构件--> <snapshosts> <enabled>false</enabled> </snapshosts> <!--控制发布版构件--> <releases> <!--控制更新频率,默认 daily(天天更新),never(从不),always(每次),interval:X(每隔X分钟更新)--> <updatePolicy>nerver</updatePolicy> </releases> </repository> <repositories> ..... </project>
其余groupId 上的插件元数据获取插件
<settings> ... <pulginGroups> <pluginGroup>com.your.plugins</pluginGroup> </pluginGroups> ... <settings>