将插件的1至多个goal绑定到某个生命周期阶段上
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
插件配置:
1 -Dmaven.skip.test=true, -D设置了java系统属性,插件目标执行时读取相应java系统属性, 注意-DskipTests会编译测试类
2 对插件进行全局配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
3 对插件进行局部配置,放于execution标签内的configuration
无groupId的为maven官方插件,即groupId为org.apache.maven.plugins
插件版本未指定?super pom已指定核心插件版本,自己定义了plugin未指定版本:自动解析为仓库(包括本地和远程)可用的最新非快照版本
继承:parent的packaging必须为pom,下面的relativePath是可选的,优先通过项目相对路径去找parent,找不到再本地仓库找
groupId,version都是可以继承的,也就是说child定义一个artifactId就可以了,基本上绝大部分都可以被继承。
dependencyManagement下可定义scope为import且type为pom(一般是父项目或聚合项目)的依赖,作用为将目标pom的dependencyManagement也加入当前pom的dependencyManagement内
同样pluginManagement的配置也必须在plugin内出现才能生效
聚合:聚合项目的packaging必须为pom,modules:定义了多个module的相对路径,反应堆理论上是按顺序build,但要考虑到依赖关系,如先1后2,但1依赖于2,那么就变成先2后1了
属性: 注意dollar与大括号之间无空格,为了表示我才加的
1 内置属性:$ {basedir}:项目根目录,$ {version}
2 pom:引用pom文件中对应元素,如 $ {project.version}
3自定义:properties下自定义
4Setting属性:引用setting.xml文件中对应元素 如 $ {settings.localRepository}
5 java 系统属性:$ {user.home}
6环境变量:$ {env.JAVA_HOME}
资源过滤:如何在资源copy的同时替换其中的maven属性
假设webapp的一些js等也需要配置资源过滤,可以在war插件内配置
Profile:
定义:pom或setting.xml文件中。
激活:
1 命令行:-P
2 setting.xml: activeProfiles
3 profile定义内:通过activation来指定java系统属性,操作环境是否匹配,文件是否存在,默认激活等多种方式