工程师的一大乐趣就是打磨工具,好比剑客磨剑,战士擦枪。
利器会带来快感,因为能高效率地生产。
自己从工作后就接触maven了,当时是有些抵触的。因为自己欠缺工程师思维,对工具理解太浅,更不会主动探索、打磨工具。
最近编译thrift文件,引发我一个思考:thrift文件是怎样编译成java文件的?答案自然是插件,于是顺藤摸瓜,厘清了一些插件的知识。
maven是一个管理项目的框架,这些功能是怎么实现的呢?就是插件。所以maven也是一个插件框架。一个插件有一个或者多个goal,插件的goal可以绑定到phase。
那什么是phase?
maven有三个生命周期 lifecycle
- clean
- default
- site
每个lifecycle都有好多phase,如图

<plugin>
<groupId>com.xxx</groupId>
<artifactId>maven-thrift-plugin</artifactId>
<version>0.1.14</version>
<executions>
<execution>
<id>thrift-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<generator>java:beans</generator>
</configuration>
</execution>
</executions>
<configuration>
<generator>java:beans</generator>
</configuration>
</plugin>
可以看到,插件maven-thrift-plugin的compile goal绑定到了generate-sources phase。
也许你会质疑,我的pom.xml没有这种配置,但是也能看到插件的执行。这是因为所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。
查看 Super POM 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom
网友评论