• Maven


    一:jar包冲突

    maven工程要导入jar包的坐标,就必须要消除jar包冲突的问题

    解决jar包冲突的方式一:

      第一声明优先原则。哪个jar包坐标在靠上的位置,哪个jar包就是先声明。的先声明的jar包坐标依赖下的包就先进入项目

    maven导入jar包一些概念

     直接依赖:项目中直接导入的jar包就是该项目的直接依赖包

     传递依赖:项目中没有直接导入的jar包可以通过项目直接依赖jar包传递到项目中

    解决jar包冲突的方式二:

      路径近者优先原则:直接依赖路径比传递依赖路径近,那会最终项目进入的jar包就是路径近的直接依赖包。

    解决jar包冲突的方式三:

      直接排除法:(推荐使用这一种)

      放我们要排除某个jar包下的依赖包,在配置exclusions标签的时候内部可以不写版本号,此时依赖包使用的版本默认和本jar包一致

      

    二、maven工程是分父子依赖关系的

    凡是依赖别的项目后,拿到的别的项目的依赖包都属于传递依赖。

    比如当前A项目,别B项目依赖,那么我们A项目中的所有jar包都会被传递到B项目中

    B项目开发者如果在B项目中导入一套ssm框架的jar包,这对于B项目是直接依赖的。

    那么直接依赖的jar包就会把A传递过来的jar包给覆盖掉。为了防止以上情况出现 我们可以把A项目的主要jar包的坐标锁住,

    这样其他依赖该项目的项目中,即使有同名jar包直接依赖,也无法覆盖。

    <dependencyManagement>

     maven聚合思想解析

    三、 子父工程

    1.父工程只需要一个pom.xml文件即可  其他的src 文件可以删除!!!

    首先需要先建造父工程  用不用骨架都可以 , 可以不需要骨架。还是要用maven形式,

    新建一个project 也可以新建一个Model,然后选择maven 不用骨架下一步 命名可以maven_parent 然后创建成功 

    然后在点住父工程 右键model 子模块

    直接创建一个dao的模块,maven_dao 即可  不需要骨架 web模式

        <parent>
            <artifactId>maven_parent</artifactId>
            <groupId>com.ujy</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    <!--子模块和父模块公用 版本号,域名, 但是项目名需要有自己的--> <modelVersion>4.0.0</modelVersion> <artifactId>maven_dao</artifactId>

    接下来依次创建 service的  不需要骨架

        <parent>
            <artifactId>maven_parent</artifactId>
            <groupId>com.ujy</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    <!--子模块和父模块公用 版本号,域名, 但是项目名需要有自己的--> <modelVersion>4.0.0</modelVersion> <artifactId>maven_service</artifactId>

    再创建web ,因为要与页面交互,所有选择web模式,加上骨架,

        <parent>
            <artifactId>maven_parent</artifactId>
            <groupId>com.ujy</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    <!--子模块和父模块公用 版本号,域名, 但是项目名需要有自己的-->
        <artifactId>maven_web</artifactId>
        <packaging>war</packaging>

     这样三个子模块就创建好了   注意:模块几个都可以 。

    注意:工程和模块的区别

    1.工程不等于完整的项目,模块也不等于完整的项目

    一个完整的项目看的是代码,代码完整就可以说是一个完整的项目,这和这个项目是工程 或者是模块没有区别。

    工程:工程天生只能使用自己的内部资源 直接依赖的 传递依赖过来的 也可以使用,天生是独立的,后天可以和其他工程或者模块建立关联关系

    模块:模块天生不是独立的,天生属于父工程,模块一旦创建,所有父工程的资源模块都可以使用

    父子工程关系:子模块天生继承父工程,可以使用父工程所有资源

     子模块天生没有任何关系 ,后天可以引入其他模块的坐标建立关系

     <!--service模块引用dao模块-->
        <dependencies>
            <dependency>
                <groupId>com.ujy</groupId>
                <artifactId>maven_dao</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    
    //分割线。。。。。。
    
    <!--web模块引用service模块-->
       <dependencies>
           <dependency>
               <groupId>com.ujy</groupId>
               <artifactId>maven_service</artifactId>
               <version>1.0-SNAPSHOT</version>
           </dependency>
       </dependencies>
    
    这样这三个模块 三层架构就建立关系  就可以称一个完整的项目

    父子工程之间不用建立关系,继承关系是天生的的 不需要建立关系。

    平级之间的引用是依赖 ,依赖不是天生的 是后天建立的 。

    子模块如果需要引用其他项目的比如dao资源 也可以 引入坐标 ,前提是其他的这个项目的这个dao需要先打成包,扔到本地仓路才可以

    传递依赖下的包能否使用:

    这个图片了解即可 ,导不进去  就重新导一次 。

    然后就是开始填充内容

    先填充maven_dao的内容

    只填充dao层的内容 架构和先搭建起来 和之前一样。然后配置文件就导入和dao相关的。

    然后填充service层的东西

    中间那个tx事务层的配置文件 需要导入一下applicationContext-dao的配置文件

      <import resource="classpath:applicationContext-dao.xml"/>
    这个是service的配置文件 导入dao的配置文件 。

    然后填充web层的东西

    web层 也需要更新一下web.xml文件 把之前的web.xml里面的三大器件配置文件拷贝下来。 然后把一些前端用到的 jsp的页面也拷贝下来。

    以为web.xml文件里面扫描有一个监听器applicationContext*.xml所以需要再创建一个applicationContext.xml

    然后里面导入service的配置文件

      <import resource="classpath:/applicationContext-service.xml"/>
        <import resource="classpath:/applicationContext-tx.xml"/>

    然后这就是填充好了

    接下来就是启动项目以及模块

    启动也分三种方式:

    第一种直接找到父工程的tomcatrun 启动 。

    启动一个maven工程永远先从本地仓库找jar包,找就找pom中添写的jar包的坐标, 里面添加了service,daojar包

    但是本地仓库没有 ,就去联网从中央仓库找,但是这几个中央仓库根本就不会收藏,所以找不到 ,需要把service,dao等 打包到本地仓库。

    但是启动父工程依赖的jiar包 中央仓库会有 所以第一种启动方式不会报错。。所以第二种启动方式需要先把service,dao等jar包打包到本地仓库。

    这就是打包到本地仓库的方式。

    接下来第三种启动方式:

    就是配置一下tomcat插件启动  ,

    前两种都不需要配置tomcat   然后到此结束!!!!!!!!!!!!!!!!!

  • 相关阅读:
    (收藏)VC 实现无标题窗口的拖拽
    进程间通信之管道
    stl
    操作系统的电源相关消息
    获得设备信息
    c++字符串大小写转换
    installshield 判断操作系统安装
    窗体的扩展样式和其值
    进程间通信交换数据——初级篇
    了解SYSDATE函数
  • 原文地址:https://www.cnblogs.com/ych961107/p/11897208.html
Copyright © 2020-2023  润新知