1.Maven的开发流程
Maven的创建工程一般在工具中执行,可以进行创建工程的工具非常多,如ecplise。 怎么用maven开发? 一般在工具上创建一个工程就开始写代码,把所有的东西都写在一个工程里面,这样好吗?我们用maven该怎么开发呢? 在一个工程里写所有的东西,所以的东西集合在一处,不方便升级、不方便修改、不方便扩展、复用。而maven提倡的是模块化编程了,我们做模块化编程就不应该把【学Java,到凯哥学堂kaige123.com】所有的东西写在一个工程里面了。 Maven里面的建议->模块化编程,一个项目拆开为很多个模块、多个子工程、方便以后的维护和复用。如果所有写在一个工程里面,某个地方出错了,就要拿整个工程出来修改或扩展,这样错误一多的时候,会老是要去修改这整个工程,会很乱。如果我们用maven呢?把一个工程划分为多个子模块、子工程、以后如果某个功能或子工程需要修改,只要单单修改对应的子模块和子工程就行了,其他没有错误的就不用动,这样比较方便。 就像汽车一样,不是由一个公司来完成整车制造,而是把它拆分为很多模块,把各个模块分给对应模块最厉害的公司去做,然后把所有模块整合起来就是一辆很棒的汽车了。 乐高、模块化手机等东西都是用到了把一个项目划分为多个模块的理念思想的。 银行作业模块化开发演示: 比如,我们的银行开发分为三个模块分别是:1.bank-id、bank-banklogic、bank-view,这三个模块,我们可以建三个maven工程,然后因为bank-banklogic里面需要依赖与bank-id模块,我们则把bank-id依赖进bank-banklogic里面去。还有我们的bank-view模块需要依赖bank-id和bank-banklogic模块,所以我们就应该把两个模块都依赖进去,如下:
以上就是一个项目使用maven工程的大致流程。 上面的项目分成了三个模块、三个工程、虽然做到了模块化编程,但是我们希望我们能有一个工程专门用来对项目的所有模块进行统一管理、统一编译等操作,我们该如何?以后还可以统一测试、统一运行,这种统一方式就是聚合。 按照maven的意思就是要建立一个文件夹,将代表三个不同子工程的文件夹放到里面去,然后在管理工程目录下建一个pom.xml文件来设置对三个子工程管理的一些配置信息,如下:
我们要建立的文件结构就如上图所示一个bank-system文件夹下有三个子工程文件夹和一个pom.xml文件,其中pom.xml文件用来对三大子工程模块进行管理。 聚合就是将子工程模块统一管理、统一编译、统一测试、统一运行,这就是聚合的中心。 怎么用ecplise来建立统一管理的工程呢?
同样是建立一个maven工程,在选packing的时候选pom,然后在pom.xml文件中进行聚合设置,如:
用到modules和module,来把三个子工程变为需要聚合工程来统一管理,记住要../bank-id这样子写,因为这三个子工程和pom.xml文件不在同一个目录层下,我们把三个子工程用一个工程统一管理后,以后编译就会四个工程一起编译,测试也是一起测试了。 把项目拆分开各个模块来是执行了模块化编程,但是模块分散后确实也不好进行统一编译、统一测试、统一运行,所以才需要聚合来创建一个工程来进行统一管理。 如果只在管理工程的pom.xml文件中设置依赖junit是不会共享到三个子工程里面去的,要想在下面也用到junit,则需要继承了。
要使用继承,就是继承父类maven工程的配置信息,继承之后,就拥有了父类maven工程里面pom.xml文件中设置的所有的东西了,先建一个管理工程students-parent,packing选pom,记住了,一定要选pom,不然可能会出错。 然后我们再建一个maven工程来继承于它:
新建的maven工程的父类工程的地方的环球id、骨架id、版本信息等都要选全:
然后,我们在管理工程的pom.xml文件中依赖进来junit后,students-view由于继承了students-parent,所以会自动有了junit,这就是继承的用处了。 继承就是继承别人的依赖,继承别人的配置,这样就免得了下面的每个子工程都去写依赖,写配置了,这样省去了很多麻烦的操作,把父类maven工程的pom.xml文件的内容进行继承。 有一个问题,只要子工程继承了管理工程,则每个子工程都要有父类里面的依赖了,但是如果我的有一些子工程不想继承管理工程里面的所有依赖怎么办呢?就是我的子工程希望可以选择性的继承管理工程里面的依赖,我们则把强制子工程需要继承的依赖写在<dependencies></dependencies>下,把可以选择性继承的依赖写在<dependencyManagement></dependencyManagement>下:
管理工程的pom.xml文件中的struts依赖写为子工程可以选择性继承的,然后子工程里继承这个可以选择性继承的依赖的时候可以少写一个版本号:
2.Maven的生命周期
所谓的生命周期,说白了也就是编译流程,就是maven工程是如何编译的,从哪里开始编译,从哪块走到哪里等等,这就是生命周期,为了好理解,我们把它看做是maven工程的流程,它包含了这个工程所要走过的所有流程,编译的过程中有哪些任务去完成,就像一个流水线一样、流水线的任务操作。 三个部分:1.清除(clean,有三个步骤)2.默认的(也就是编译)3.网站生成(site) 清除:哪三个步骤?首先是清除前的准备工作,然后是把所有文件删除掉,最后是清除后的尾部收尾工作。三个步骤也就是三个任务,pre-clean、clean、post-clean,每次清除都要执行这三个任务。 默认编译:在编译的过程中总共要执行的任务有:
由上图可知,我们主要比较清楚的任务有:compile、test-compile、test、package、install等,这些和我们上次讲的maven的常用命令刚好是一样的,也就是说如果也执行第15位的test任务,则要把前面的14个任务执行完成之后,才会去执行第15个test任务。 如果要执行deploy,则要把所有任务执行一遍,这就是和流水线一样的,我们要流到下一个岗位,则上一个岗位必须完成,整个编译有很多个任务,流水线生成,写哪个命令就要走不同的流程、执行不同的任务。以后如果觉得需要在编译流程中加入某个任务也是可以的,我们可以使用插件来,在现有的编译流程的任务中插入一些我们需要加入的任务。
如上所示,如果我们进行的安装任务,则在执行到这个任务之前,会先执行打jar包、test、testcompile、testResources、compile等任务,如果我们需要在某个任务之间插入一个任务,可以使用插件来实现。 网站的生成:maven是模块化开发,开发时写组件,写完需要发布,发布就要生成网页,所以有网站生成这个流程,maven可以帮你的组件生成一个介绍的网页,如果你需要就需要执行网站生成的生命周期,如果不需要就不用执行了,一般用不到这个东西。 三个生命周期,每个生命周期有【学Java,到凯哥学堂kaige123.com】很多个任务组成,学习这个我们首先需要了解一下maven的编译这样的流程是怎么完成的,其次我们希望在一个生命周期的某个点上加上一个任务,这个任务我们自己来弄,就要用插件了。 在生命周期的某个点上插入一个插件去,就是相当于插入了一个任务了,我们自带的任务还是不够的。 怎么看maven有多少个任务? 在apache官网中,进入maven页面->plugin页面进去:
我们需要弄一个给源码打包的插件,然后插入编译流程中,让编译过程会给源码打包而不仅仅是打jar包:
我们这里配置了插件有打源码jar包和test源码的jar包两种,配置完后,保存然后run as –>test,得到的结果如右侧所示,就会有源码的jar包和test源码的jar包了。如上图所示的配置方法。 还可以加如一个插件来改变JDK的版本:
先在pom.xml文件中写好配置语句,然后反键工程名->maven->update Mavne Project,然后jdk就会自动变成1.6版本的了。 还可以把插件写到父类maven工程里面去:
上面是父类maven工程的pom.xml文件信息,
下面是子工程的pom.xml信息
在管理工程的pom.xml文件,反键->run as ->test,一测试,就会在子工程下自动打好下面的包。 我们还可以配置在编译的时候先clean 后package,如: