maven小结

来源:互联网 发布:js获取月为两位数 编辑:程序博客网 时间:2024/05/22 06:29
现在就maven的一些知识进行汇总归纳;

    基础知识:  
        1: maven是个啥; 
                    一种简单粗暴的理解就是:maven是一个帮我们统一管理 项目依赖的jar包 的工具;(虽然比较片面 不过简单实用,因为我们大部分只用到了这部分功能)
        2: 如何创建maven项目
                    maven 的理念是:约定大于配置; 所以maven项目的结构也是约定俗成的;
                    
                    如:我这个maven-archetype项目 ,项目文件夹下有1个文件(pom.xml),2个文件夹(src,target);
                    pom.xml 是 maven的配置文件; src/main/java 放置java代码 ; src/java/resources 放置配置文件; src/test/java 放置测试代码; target 是maven编译结果的文件夹地址;
        3: maven项目的3要素;
                    在pom中配置项目中,必须指定的3个要素:  groupid ,artifactid,version;  
                    gid+aid组成了项目的唯一标识; version是不同版本;
                    所以每个项目的 gid+aid 必须是 唯一的;
        4: maven项目的类型
                    在pom中我们可以指定项目的类型;常见类型有(pom,war,jar,ear) ,默认为jar;在<packaging>中配置;
                    pom:项目只有pom文件,不会解析其他内容 (src下的内容)
                    war:  web项目,war类型的项目,web相关代码(jsp,js,css等)放在 src/main/webapp 下;
                    ear :  ear项目; (其实就是一种打包结构了,可以不了解,如果想深入了解的可以自行百度或者微信qq问我)
                    jar : 普通的java项目; 编译之后会生成jar ;     
        5: maven的继承
                    maven项目如果类型为pom,那么就可以作为其他项目 父类; 
                    
                    继承可以继承如下内容: gid,version  ; 还有 父类中的其他配置(依赖,参数配置,插件等);
                    一般什么时候用 依赖呢? 一个大项目 分成 很多子项目的时候 我们一般会使用 父类来管理 各个子项目; 
        6: pom.xml 中的 module(s) 是啥?
                    在pom项目中,我们可以配置module引入其他项目;
                    
                        注意: module 配置的是其他项目的文件夹名称 ;
                        module的作用是啥呢? 类似于 include ,就是引入其他项目; idea 打开pom文件会识别当前的项目,如果当前项目是 pom类型,并且配置了 module 那么 module中的项目也会被识别出来;
        7: maven 如何配置依赖
                        在pom.xml 中 配置 dependency
                        
                        因为maven项目的唯一标识是 gid+aid 所以 如果2个依赖的 gid和aid都完全相同则maven会认为是依赖一个项目;
        8: maven 依赖的传递性 ;  
                        A配置依赖B,B配置了依赖C; 那么C也会传递到A ; 会表现为A依赖了B和C;
        9: maven依赖类型 
                        maven项目之前我们说过 maven 可以配置 pom的类型,所以在配置dependency时 也需要配置 <type> (对应我们之前的 packaging类型 )不过一般都是依赖jar,所以默认是 jar 就不需要显示的申明;但如果依赖的项目是pom或者其他的则需要配置type 指明项目类型; 
                        7中我们说了 maven的依赖是可以传递的,其实说的不是很对; 默认配置下是可以传递的,但是我们可以配置 <scope> ,scope的取值有 runtime,compile,test,provided,system; (默认是compile)
                        compile:参与项目的编译及运行 可以传递
                        runtime:不参与项目的编译,但是后期打包及运行是会使用到该jar ; 可以传递
                        test:测试使用;仅当运行 main/test/java 下的代码时起作用,不传递
                        provided:仅参与到编译;不会打包到编译文件; 不传递
                        system: 本地jar非maven仓库jar ,跟provided 差不多,只是provided是从仓库获取 system 是从其他路径; 与 systemPath 协同使用,systemPath指定jar所在地址; 仅参与编译 不打包 不传递;
       10: 本地jar如何 maven 管理呢
                        一些老项目需要的jar maven仓库没有,这时候想maven管理 ,一个是使用上面说的 system方式配置,但是打包无法获取jar,还需要手动的进行复制;
                        手动的将 jar install到本地仓库或者让管理员 deploy 到maven服务器;如果deploy了,那就跟其他项目是一样了;不deploy的话每个人都得手动install 太麻烦,所以 可以使用如下方法 进行简化; 配置plugin
                        
                        依赖的地方只需要跟普通的依赖一样 ,不需要 scope 为 system; 
                        
                        每次打开项目先执行下 clean;  
                        原理就是 通过plugin 帮我们执行 install jar到本地仓库;
0 0