maven知识

 

首先下载maven 然后win的配置环境变量

maven目录结构

   --main

        --java

            --package

  --test

       --java 

          --package

 resources

 

maven 需要有Java环境 ,是Java开发的 

 

 

然后Java里面要写 各种包 类

 

pom  项目对象模型

    groupId  一般用包名来表示 表示项目是由哪个开发组织开发的 类似于籍贯

    artifactId 一般是项目的名称 类似于姓名

    version  该元素定义jar包的版本 类似于身份证号码

 

往pom中引入坐标

  查找条件 

     组织 项目 版本   

 

web工程达成war包

  编译 测试 运行 打包 安装 整个过程maven进行管理

 

  mvn tomcat:run

  进入到项目中:

期间运行了一些插件 

最终达成war包 丢到tomcat目录下

 

从本地找 本底没有就私服找 没有私服就去中央仓库找

最终maven工程都会使用本底jar包

 

 

注意区别maven工程 和 web工程

必须的工程目录是  web-inf  和 web.xml

 

 

maven常用的命令: 

  mvn compile

 编译到target目录下面

 mvn clean

  target目录会被干掉的

 mvn tetst

  编译到target的test-class目录下  并且输出编译结果

 mvn packages

 打包 到target目录下  Java打成jar包  web打成war包

 mvn install

打成jar包或者war包到本地仓库 (根据maven的配置到了本底仓库哦)

 

 

eclipse:

show view ->maven

 

 

  jar  Java项目

  pom做工程聚合用的 父子

  war web项目

 

 

创建出war项目后:才有默认的webapp目录

需要自己创建 WEB-INF   web.xml

 当然!!可以使用!! eclipse工具

右键工程 然后Java EE Tools 然后generate D.... 

web工程标准结构就生成了

 

 右键项目 maven -- Add Plugin

 输入 compile

 选择版本

 

这就是scope: 哈哈

provided  提供 编译时候用到 打包时候用不到

 

tomcat提供了某个jar包 不需要我们再自己提供了  否则可能冲突  限制成 provided

runtime  运行时候用 类似于jdbc驱动  

 test:   只有测试时候用 

 system : 整个工程

 

坐标:  组织名  项目名  版本号

 

开发时候引用而不是拷贝,修改一处 其他的都不用管 引用正确的就OK了

 

 

拆分: 父工程和子工程

   父工程引入了 每个子工程就不需要再去引入了  子工程就拥有了父工程的的那些了

   好像类似Java的父子继承关系啊

   

 

    

 父工程

  一定是pom工程!!

  

子工程创建成功后,父pom会多了一个: 

同时,子工程也会指向了父工程的坐标 Java中的super啊卧槽啊啊:

 

 标准的开发  controller(web)  dao  server

 

首先父类:

   

 

 DAO层:

  

 

 

 Service层:

  

  

web层(Controler)

 

 

工程拆分完毕!

  controller依赖service依赖dao

 

  首先service层:

    service和dao不是同一个工程,所以service使用dao,需要添加依赖:(dao层将来也会打成jar包,引入daojar包的坐标)

   

   

 

   service层才可以用到:

   

  web层用到service层:

  

  

   引入service的jar时候,service依赖的dao也加进来了!!!!

   类似于 引入某个框架的core包时候。他这个项目的pom中parent作怪,其他的都来了~~~ core这个框架是有个父工程!!!

   依赖传递呀~~~

 

   

既然有依赖!parent就可以搞定呢,父类继承父类的~~ 寄托于父工程就OK了

父类中添加依赖。struts2-core  mybatis的哈哈哈哈~ 

   

 

   查看层级依赖关系:

    

 

 

在生效的依赖中: 

如果 mybatis3.5 依赖引入的 xjar包2.0版本 和 struts2.4 依赖的引如的 xjar包6.0版本版本不一致,冲突了呀。Exclude排除下就OK了~~~~

 右击排除就OK了

 pom的变化: 排除依赖

 

或者排除某个jar。用自己实现的

 

添加测试jar包时候 需要 设置scope为<scope> test </scope>哦  

在dao项目添加 junit:

 dao层有了junit的jar包。service是不会传递过来的。依赖传递是有范围的。

 如果去除掉 scope标签 默认就是编译的范围了 scope的作用域范围:这样就有了哦

 

 

  除了通过 排除来解决依赖冲突 之外,还有别的方案:

     依赖的的原则 第一声明者优先  谁在前面用谁的生效~

     查看依赖关系的右边: 最终能脱颖而出 选拔出来的 是pom文件中写在前面的!  第一原则:第一个声明者优先原则

   

  第二个原则: 路径近者优先

       

 关于版本锁定:

 在父类pom中:

        版本锁定

<dependencyManagement>  
      <dependencies>  
            <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
                <version>3.2.7</version>  
            </dependency>  
    </dependencies>  
</dependencyManagement>

     这样就锁定了版本了

 

 在dao等其他的项目去依赖的时候:坐标就不用全了   父类中已经把版本锁定了

<dependencyManagement>  
      <dependencies>  
            <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
            </dependency>  
    </dependencies>  
</dependencyManagement>

  

驱动包注意 runtime 的作用范围哈

  

  除了版本锁定,还有版本常量的使用!

     <properties>

   <spring-version>4.3.7.RELEASE</spring-version>
   <mybatis-version>4.3.7.RELEASE</mybatis-version>
 </properties>

      <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-version}</version>
        </dependency>
 
    </dependencies>

 

 

Maven的依赖管理:

   1 依赖的出传递

   2 依赖的范围

   3 exclude排除jar包冲突

   4 第一声明有限

   5 路径近者优先

   6 版本锁定

  7 使用版本常量

 

posted @ 2019-02-01 02:26  toov5  阅读(253)  评论(0编辑  收藏  举报