工程師的一大樂趣就是打磨工具,好比劍客磨劍,戰(zhàn)士擦槍聊训。
利器會帶來快感礁竞,因為能高效率地生產(chǎn)。
自己從工作后就接觸maven了,當時是有些抵觸的席噩。因為自己欠缺工程師思維班缰,對工具理解太淺,更不會主動探索班挖、打磨工具鲁捏。
最近編譯thrift文件,引發(fā)我一個思考:thrift文件是怎樣編譯成java文件的萧芙?答案自然是插件给梅,于是順藤摸瓜,厘清了一些插件的知識双揪。
maven是一個管理項目的框架动羽,這些功能是怎么實現(xiàn)的呢?就是插件渔期。所以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倦青。
也許你會質(zhì)疑,我的pom.xml沒有這種配置盹舞,但是也能看到插件的執(zhí)行产镐。這是因為所有的 POM 都繼承自一個父 POM(無論是否顯式定義了這個父 POM)。父 POM 也被稱作 Super POM踢步,它包含了一些可以被繼承的默認設(shè)置癣亚。
查看 Super POM 默認配置的一個簡單方法是執(zhí)行以下命令:mvn help:effective-pom