Maven是什么就不用多说了,做为Apache下的顶级项目,Maven目前基本上已经成为Java依赖管理的标准,一个公开发布的项目,没有Maven坐标基本是不合格的——即便你使用其余工具,例如Ant或者Gradle构建。研究Maven主要是由于在上面吃亏比较多,最近恰好也有些定制的需求,因此就学习一下。html
最近也观摩了一下咱们公司首席架构师的一套代码,他的不少框架受到Maven的影响很深,从里面看到一些神奇的用法,也正好学习一下。apache
介绍Maven前先介绍下Codehaus,其实他们没有直接关系,可是源码层面却有千丝万缕的联系。架构
Codehaus是由Bob McWhirter创办的一个开源组织,旗下也有一些优秀项目,例如比较热门的JVM脚本语言Groovy,以及JSON处理库http://jackson.codehaus.org/等。app
为何说有联系呢?由于Maven的创始人是Jason van Zyl,现任sonatype CTO。他同时也是Codehaus的联合创始人,因此你能够在Maven的代码架构中,看到不少Codehaus的项目。例如IoC框架plexus、代码生成工具Modello等。框架
若是真的要了解Maven源码,这套东西是不可不知的。maven
Plexus是一套IoC框架,它经过注解和XML来完成Bean的配置和注入,其用法和咱们熟悉的Spring很是相似。其实相比Spring,它基本没有什么亮点,发展也比较慢,这里全当知识库补充一下。这里我不写什么介绍了,直接贴一个对照表吧。ide
<table> <tr> <td>名称</td> <td>Spring</td> <td>Plexus</td> </tr> <tr> <td>配置文件</td> <td>application-context.xml(可定制)</td> <td>components.xml</td> </tr> <tr> <td>bean声明</td> <td><bean></td> <td><component></td> </tr> <tr> <td>bean声明(注解)</td> <td><@Component></td> <td><@Component/@Service…></td> </tr> <tr> <td>bean注入(注解)</td> <td><@Requirement></td> <td><@Autowired/@Resource></td> </tr> <tr> <td>建立容器</td> <td>ApplicationContext appContext = new ClassPathXmlApplicationContext("");</td> <td>PlexusContainer container= new DefaultPlexusContainer();</td> </tr> </table>工具
Modello是一个代码生成工具,它能够从一个模型文件产生多个POJO,以及这些POJO与XML的映射处理、以及XML的Schema等内容。在源码目录下面,咱们会看到一个mdo文件,那就是它了。它的作法好很差很差说,不过这个代码生成的思路却是能够借鉴。学习