插件配置就是绑定插件,指定其预定义的参数值,来进一步调整插件目标所执行的任务。
可以通过命令行和POM中插件全局配置的形式来配置,不是所有的插件配置都可以通过命令行配置的。
1、命令行插件配置
如maven-surefire-plugin插件提供一个maven.test.skip参数、当值为true时会跳过执行测试、命令行执行方式:
mvn install –Dmaven.test.skip=true
mvn install
可以对比两者在控制台的输出就发现下面多了test阶段
2、POM中插件全局配置
在声明插件的时候,对此插件进行一个全局配置,后面所有使用该插件的都要遵循这个配置。
比如指定maven-compile-plugin编译Java1.7版本的源文件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
上面的设定会报错、因为本地环境是jdk1.7 、而要求使用1.8版本的编译。
[ERROR] Failed to execute goalorg.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project items-thkinjava:Fatal error compiling: invalid target release: 1.8 -> [Help 1]
将1.8改成1.7就行、并且可以是1.7以前的版本、表示向上兼容以前的版本。(记得编译之前使用 mvn clean 将前面编译的class删除)。
3、获取插件信息
比如查看插件目标有哪些参数可以使用、使用方式、示例、常见问题等:
网址:http://maven.apache.org/plugins/index.html
下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/
4、插件解析机制
Maven使用插件目标不需要提供完整的插件坐标信息就能解析得到正确的插件,这样简化了插件的使用和配置,但是也让出现问题时更难以定位错误来源,了解解析机制和本质。
如mvn eclipse:eclipse
5、插件仓库
插件与依赖很类似,他们都是在使用的时候会去本地仓库寻找,找不到就到远程仓库找,找到之后下载到本地仓库然后使用。
但是插件仓库与依赖仓库是不同的两种仓库,maven会区别对待依赖仓库和插件仓库。
当一个插件在本地仓库中找不到时他会到插件仓库去寻找、不会到依赖仓库中寻找。
插件仓库的配置与依赖仓库很类似
不同于依赖仓库使用的Repositories和Repository,插件仓库使用的是pluginRepositories和pluginRepository。
maven内置了插件仓库配置,也是在超级POM——$M2-HOME/lib/maven-model-builder3.2.3.jar/org/apache/maven/model/pom.xml中:
<pluginRepositories> <pluginRepository> <id>central</id> <name>CentralRepository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> </pluginRepositories>
与依赖仓库很类似:
<repositories> <repository> <id>central</id> <name>CentralRepository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
对比发现,两者仓库就是中央仓库,但是如果没有插件仓库配置,maven在本地找不到插件的时候就不会去中央仓库找所需插件。
并且出于稳定性考虑、他关闭了快照版本的插件、和从不更新本地仓库中存在的插件。
6、插件的默认groupId
在POM中配置插件如果不配置groupId则表示是maven官方插件,也就是说groupId是org.apache.maven.plugins,这样做没有省多少配置,也会让不熟悉的人感到疑惑,不推荐使用。
7、解析插件版本
Maven也是通过metadata.xml解析版本的,同样maven3在当插件没有声明版本的时候不再解析SNAPSHOT和latest,而是用release。
8、解析插件前缀
Maven可以通过(插件前缀:插件目标)的方式执行命令,比如clean:clean,会执行maven-clean-plugins:clean。
<plugin> <name>Apache Maven Clean Plugin</name> <prefix>clean</prefix> <artifactId>maven-clean-plugin</artifactId> </plugin>
maven是根据**/*/plugins/maven-metadata.xml和自己本地仓库中的com/your/plugins/maven-metadata.xml综合,根据前缀获取插件完整信息。
maven会默认以org.apache.maven.plugins作为groupId,收集所有插件仓库的元数据org/apache/maven/plugins/maven-metadata.xml
而默认的仓库为http://repo.maven.apache.org/maven2/,即查找http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml
添加默认groupId的方式为在maven的settings.xml文件里添加
<settings> <pluginGroups> <pluginGroup>org.jvnet.hudson.tools</pluginGroup> </pluginGroups> </settings>
加入这一行信息可以在我们使用Hudson的maven插件时使用缩略名(比如使用hpi:create代替org.jvnet.hudson.tools:maven-hpi-plugin:1.23:create)
总结
掌握maven的三套生命周期,阶段,和每个阶段默认的插件目标。
掌握生命周期,插件两个概念,会配置插件,配置插件行为,知道插件默认仓库在哪里配置,是什么,会配置插件仓库,掌握插件与依赖之间的联系区别。