设为首页 加入收藏

TOP

maven仓库之第二篇(一)
2019-10-09 19:59:54 】 浏览:95
Tags:maven 仓库 第二篇
1. 什么是maven?
        它是一个软件开发的管理工具,主要管理的工作是:依赖管理,项目构建.
    2. 使用maven的好处?
        能够集中管理jar包,提供一键构建.
    3. maven的安装及配置
        配置:MAVEN_HOME,PATH路径配置.
        本地仓库 : <localRepository>
        Settings.xml 文件中.
        <localRepository>d:/repository</..>
        运行 : mvn -v.
    4. 常用的maven命令
        compile,test,package,install,deploy
        clean
        site
    5. maven 工程是具有一定的目录结构
        src 
            main
                java(程序主要代码)
                resources(配置文件)
                webapps
            test
                java(测试代码)
                resources(测试的配置文件)
        pom.xml(写一些坐标)
    6. eclipse工具下的maven工程开发
    7. 在pom.xml文件中如何引入坐标
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    8. 总结
        二、Maven工程的拆分与聚合(重点)
            一个完整的早期开发好的crm项目,现在要使用maven工程对它进行拆分,这时候就可以将dao拆解出来形成表现独立的工程,同样service,action也都这样拆分

            工程拆分之后,将来还要聚合(聚合就是将拆分的工程进一步组合在一起,又形成一个完整的项目)
            为了达到聚合的目标,所以今天会引入
            父工程(maven project)
            子模块(maven module)  dao  ,service, web

             开发步骤:
            1.创建一个maven父工程

            点下一步:

            创建后的父工程如下:

            从它的目录结构可以看出,父工程本身不写代码,它里面有一个pom.xml文件,这个文件可以将多个子模块中通用的jar所对应的坐标,集中在父工程中配置,将来的子模块就可以不需要在pom.xml中配置通用jar的坐标了
            2.如何创建这个父工程的一个子模块?

            点next,进入如下图:

            点next,进入如下图:

            3.再次查看父工程的pom.xml文件

            4.查看子模块的pom.xml,发现多了一个 parent结点

            并且内部所包含的结点,其实就是父工程的坐标
            坐标=groupId+artifactId+version
                    组织名   项目名       版本
            三.冲突问题的解决
            1.通过添加<exclusion>标签来解决冲突
            在父工程中引入了struts-core,hibernate-core,就发现jar包是有冲突的
            Javassist存在版本上冲突问题

            进入下图:

            背后的父工程的pom.xml文件中,添加的内容 

            2.依赖调解原则:
            maven自动按照下边的原则调解:
            ?1、第一声明者优先原则
                在pom文件定义依赖,先声明的依赖为准。

            测试:
            如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。
            分析:
            由于spring-context在前边以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到了工程中。


            ?2、路径近者优先原则
                例如:A依赖 spirng-beans-4.2.4,A依赖B依赖 spirng-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中,因为spring-beans-4.2.4相对spirng-beans-3.0.5被A依赖的路径最近。
            测试:
            在本工程中的pom中加入spirng-beans-4.2.4的依赖,根据路径近者优先原则,系统将导入spirng-beans-4.2.4<dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                    <version>4.2.4.RELEASE</version>
                </dependency>

            2.使用版本锁定实现冲突解决
            首先父工程中pom.xml文件添加:


            在使用坐标时,对于同一个框架,引入多次时,它的版本信息就会多次出现,所以
            可以借用常量的思想,将这些版本号提取出来,在需要用到的时候,直接写版本的常量名称就可以了。

            引用上面的常量

            3.最终在ssh_parent的pom.xml中引入的坐标

        依赖注入手动排除 : 可以当做特殊情况,struts2框架和hibernate框架很少使用共同的jar包.
        声明优先原则 : 选择的依据,根据引入顺序,谁先引入,就先使用谁.
        pom.xml里面的Dependencies选项里面的坐标引入的都是直接依赖.
        而通过直接依赖引入的jar包都是传递依赖.
        路径近者优先 : 直接引入的依赖,优先级高于传递进来的依赖.
        
        <!--使用常量来管理以后版本升级的问题 -->
        <properties>
            <spring-version>4.2.4RELEASE</spring-version>
        </properties>
        <!-- 依赖管理节点限制使用jar包的版本 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring-version}</version>
                </dependen
            </dependencies>
        </dependcyManagement>
        
    三、依赖关系
        依赖具有传递性,但不是无限传递的,传递的规则如下:
        A-provided-B   B-runtime-C

        解决方法:
        如果在依赖传递过程中,导致jar包丢失,我们的做法很简单,就是再导入一次坐标


        四.编写Service模块
        1.创建一个maven m
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Eureka实战-5【启用https】 下一篇SSM框架手动实现分页逻辑(非Page..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目