maven学习

maven 

1.maven的作用
a.管理jar
    i.增加第三方jar(spring-context.jar   spring-aop.jar....)
    ii.jar包之间的依赖关系(自动关联下载所有依赖的jar,并且不会冲突)

b.将项目拆分成若干个模块

2.maven概念:
  是一个基于java平台的自动化构建工具
  make->ant->maven->gradle
  
maven能做哪些:
清理:删除编译的结果,为重新编译做准备
编译:java->class
测试: 针对于项目中的关键点进行测试,亦可用项目中的测试代码去测试开发代码;
报告:将测试的结果进行显示
打包:将项目中包含的多个文件压缩成一个文件,用于安装或部署。(java项目-jar,web项目-war)
安装:将打成的包  放到 本地仓库,供其他项目使用
部署:将打成的包  放到 服务器上准备运行。
    -将java、js、jsp等各个文件进行删选、组装,变成一个可以直接运行的项目


   -Eclipse中部署的web项目可以运行
   -将Eclipse中的项目,复制到tomcat/webapps中则不能运行
   -项目可以在webappas中直接运行
   
   Eclipse中的项目,在部署时会找到一个对应的部署项目(在wtpwebapps中),区别在于:部署项目没有源码文件src(java),只有编译后的class文件和jsp文件
   因为两者目录结构不一致,因此Tomcat中无法直接运行Eclipse中复制过来的项目(因为如果要在tomcat中运行一个项目,则该项目必须严格遵循tomcat的目录结构)

   Eclipse中的项目要想在透明car中运行,就需要部署:a.通过eclipse中的 Add and Remove 按钮进行部署
                                                   b.将web项目打成一个war包,然后将该war包复制tomcat/webapps中,直接运行即可

自动化构建工具maven:将原材料(java,js,css,html,图片)->产品(可发布项目)

编译-打包-部署-测试  --》 自动构建

1.下载配置maven
    a.配置JAVA_HOME
    b.配置MAVEN_HOME
    c.配置path
    d.验证
      mvn -v
    e.配置本地仓库  maven目录/conf/setting.xml
            默认本地仓库:xx/repository
            修改本地仓库:<localRepository>新的地址</localRepository>

2.使用maven
  约定 优于 配置
  
  硬编码方式:job.setPath("d:\\abc")
  配置方式:
     job
   conf.xml     <path>d:\\abc</path>
  约定:使用默认值
  
  
  maven约定的目录结构:
        项目
        -src
              -main    :程序代码
                     -java      java代码
                     -resources  资源代码、配置代码
              -test          :测试代码
                     -java
                     -resources
  
        pom.xml     : 项目对象模型
  
        <parent>
        
          <groupId>域名翻转,大项目名</groupId>
          <groupId>com.zjyh</groupId>
          
          <artifactId>子模块名</artifactId>
          <artifactId>seedPlatform</artifactId>
          
          <version>版本号</version>
          <version>0.0.1-SNAPSHOT</version>
          
        </parent>

依赖:
spring-context.jar -->  spring-aop.jar
A中的某些类需要使用B中的某些类,则称为A依赖于B
在maven项目中,如果要使用一个当时存在的jar或者模块,则可以通过依赖实现(去本地仓库、远程仓库去寻找)


执行mvn:必须在pom.xml所在目录中执行

maven常见命名:(第一次执行命令时,需要下载执行该命令的基础环境,所以会从远程仓库中下载该环境到本地仓库)
编译:(Maven基础组件,基础jar)
mvn compile  --只编译main目录中的java文件
mvn test      测试
mvn package   打成jar/war
mvn install   将开发的模块放入本地仓库,供其他模块使用(放入的位置是通过gav决定)
mvn clean     删除target目录(删除编译文件的目录)
运行mvn命令,必须在pom.xml文件所在目录

通常下载一个jar,先在本地仓库中下载 ,如果本地仓库中不存在,则再联网到中央仓库(镜像)去下载


依赖:
A jar  ->  B jar
       <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

1.依赖的范围、依赖的有效性
                 compile(默认)    test      provided 
主程序[main]        √               ×            √
测试程序[test]      √               √            √
部署[运行]          √               ×            ×

Maven在编译、测试、运行项目时,各自使用一套classpath

依赖:
a.commons-fileupload.jar  -->  commons-io.jar:虽然我们实际开发时,认为二者jar必须关联,但是maven可能不这么认为
b.如果X.jar依赖于Y.jar,但是在引入X.jar之前已经存在了Y.jar,则maven不会再在引入X.jar时引入Y.jar


2.依赖排除
 A jar  ->  B jar
当我们通过maven引入A.jar时,会自动引入B.jar
   A.jar(x.java,y.java,z.java)   B.jar(p.java,c.java,i.java)
   A.jar和B.jar之间的依赖本质:z.java -> c.java
   
   
   <!-- 排除依赖pom.xml中配置,例如:依赖排除bean-->
   <exclusions>
     <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-beans</artifactId>
     </exclusion>
   </exclusions>
 
3.依赖的传递性
A.jar -> B.jar -> C.jar

要使A.jar -> C.jar:而且仅当B.jar 依赖于C.jar的范围是compile
 
4.依赖原则:为了防止冲突
a.路径最短优先原则
b. 路径长度相同:
   I.在同一个pom.xml文件中有2个相同的依赖(覆盖):后面声明的依赖会覆盖前面声明的依赖(严禁使用本情况,严禁在同一个pom中声明2个版本不同的依赖)
   II.如果是不同的pom.xml中有两个相同的依赖(优先),则先声明的依赖,会覆盖后声明的依赖

(JDK只能识别source folder中的源码)


在Eclipse中创建maven工程
1.配置maven:
  配置maven版本
  配置本地仓库:设置settings.xml

在eclipse中编写玩pom.xml依赖后,maven-update project

package:命令执行顺序
resources
compile
test
package

maven生命周期:
生命周期和构建的关系:
生命周期中的顺序:a b c d e
当我们执行c命令,则实际执行的是a b c 

生命周期包含的阶段,3个阶段:
clean lifecysle : 清理
      pre-clean  clean  post-clean
      
default lifecysle : 默认(常用)

site lifecysle : 站点  
  pre-site  site  post-site  site-deploy
  
再次强调:在pom.xml中添加完依赖后,需要maven -> update project


统一项目的jdk:
方法一:build path:删除旧版本,增加新版本
方法二:右键项目-属性-project Factors - java version 改版本(之前存在要改的版本)
方法三:通过maven统一版本
  <profiles>
    <profile>
        <id>jdk17</id>
        <activation>
           <activeByDefault>true</activeByDefault>
           <jdk>1.7</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
            <maven.compiler.compilerVersion>1.7<maven.compiler.compilerVersion>
        </properties>
    </profile>
  </profiles>


打包方式:
java工程---jar
web工程--war
父工程--pom

继承实现步骤:
1.建立父工程:父工程的打包方式是pom

2.在父工程的pom.xml中编写依赖
  <dependencyManagement>
     <dependencies>
          <dependency>

3.子类:
  <!--当前工程继承一个父工程:1加入父工程坐标gav 2当前工程的pom.xml到父工程的pom.xml的相对路径-->
  <parent>
       <!--1加入父工程坐标gav-->
       <proupId>org.lanqiao.maven</proupId>
       <artifactId>B</artifactId>
       <version>0.0.1-SNAPSHOT<version>
       <!--2当前工程的pom.xml到父工程的pom.xml之间的相对路径-->
       <relativePath>../B/pom.xml<relativePath>
  </parent>

4.在子类中需要声明:使用那些父类的依赖
   <dependency>
       <!--声明:需要使用到父类的junit(只需要g,a)-->
       <proupId>junit</proupId>
       <artifactId>junit</artifactId>
   </dependency>


聚合:

Maven项目能够识别:自身包含、本地仓库中的

Maven2工程依赖Maven1工程,则在执行时,必须先将Maven1工程加入到本地仓库(install),之后才能执行Maven2工程
以上前置工程的install操作,可以交给“聚合”,一次性搞定。。。

聚合的使用
在一个总工程中配置聚合:(聚合的配置只能配置在"打包方式为pom"的Maven工程中)
<!--配置聚合,避免前置工程的install操作-->
<modules>
   <!--项目的根路径,可以不用设置顺序,顺序没有影响-->
   <module>../Maven1</module>
   <module>../Maven2</module>
</modules>
配置完聚合之后,以后只要操作总工程,则会自动操作该聚合中配置过的工程

注意:clean命令删除target目录,并不是清理install存放入的本地仓库

聚合:
   Maven将一个大工程拆分成若干个子工程(子模块)
   聚合可以将拆分的多个子工程合起来
   
继承:
    父->子工程,可以通过父工程统一管理依赖的版本

    
部署web工程:war

通过maven直接部署运行web项目:
a.配置cargo
b.maven命令:deploy

实际开发中,开发人员将自己的项目开发完毕后达成war包交给实施人员去部署:


 

视频学习地址:https://ke.qq.com/course/list/DT

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值