栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

22-06-02 javaweb(13) 西安 maven

Java 更新时间:发布时间: 百科书网 趣学号

为什么要学习maven?

maven 帮助我们构建项目、依赖管理。


原因1,在团队开发流程中:

从代码托管中心 git,把完整功能宕下来。再部署到linux服务器,但是该服务器里面一定不会安装idea。这个时候,就要借助于专门的构建工具maven来构建。

原因2,maven的依赖管理:

一个模块用到上百个jar包是非常正常的。非常的浪费磁盘空间。maven可以非常方便你的帮我们管理我们的jar包。


maven项目构建

Java项目开发过程中,构建指的是使用『原材料生产产品』的过程。

原材料:Java源代码、基于HTML的Thymeleaf文件、图片、配置文件...

产品:一个可以在服务器上运行的项目(指web应用)

构建是一个过程。构建过程包含的主要的环节:

  1. 清理:把上一次编译的class文件、记录报告的文件清空
  2. 编译:java源程序编译成*.class字节码文件
  3. 测试:自动执行测试代码,测试代码自动执行(比如数据库能否连接成功)
  4. 报告:把测试的结果放到一个文件进行记录
  5. 打包:java工程:打jar包   ||   Web工程:打war包  ||  maven父工程 pom
  6. 安装:将本地构建过程中生成的jar包存入Maven本地仓库。(war包要引用当前jar包)
  7. 部署:将准备好的war包部署到服务器上运行

这里打包、安装、部署的意思呢?

把我们的maven工程(打jar包的maven工程)执行第五步,打包后就跟我们用的第三方jar包一模一样,安装后,让我们的war包去依赖我们当前的jar包,其实就是Web工程里导入的jar包。放在Web工程的WEB-INF/lib目录下,最后让war包部署到服务器运行。要牢记:构建的最终产品就是war包。

打包的结果会存放在target目录下
jar包的名字是  artifactId-version.jar

坐标和仓库中jar包的存储路径之间的对应关系
坐标:

  javax.servlet
  servlet-api
  2.5

上面坐标对应的jar包在Maven本地仓库中的位置:

Maven本地仓库根目录javaxservletservlet-api2.5servlet-api-2.5.jar


maven依赖管理:

jar包的种类和版本maven都可以精确的控制!

如果A工程里面用到了B工程的类、接口、配置文件等等这样的资源,那么我们就可以说A依赖B。

比如,junit-4.12依赖hamcrest-core-1.3。thymeleaf的依赖就更多了。。。

jar包统一的下载来源:maven会统一去中央仓库下载。

也可以设置一个镜像,比如阿里云镜像网站下载。

	
      alimaven
      central
      aliyun maven
      http://maven.aliyun.com/nexus/content/groups/public
    

jar包下载失败:

情况一jar包没有下载完

1.clearLastUpdated.bat工具(把文件中路径改掉,改成我自己的本地maven仓库的地址)

 
情况二:下载完了但是内容不完全,如报错方法不存在,类不存在

使用文件校验工具,比较俩个值是否相等就可以判断是否丢包了,建议删了重新下载改jar包


创建maven格式的web工程

保证工作空间在我刚创建的d盘下的workspaces

配置好maven


1.设置打包方式

右小角会弹出一个小框,选择import changes

2. 打开项目结构:settings-project structure-moudle

跟idea版本有很大关系啊,最后使用了老师的2019.3.3,才有效果呢。

会自动出现web目录如下,且需要点击+号,手动加入路径

 效果就是:会自动在srcmain下生成webapp目录


配置tomcat

点+

 选择tomcat server

点击加号,加入maven-web:war exploded


jar包的依赖范围:
在不同的位置是否能够使用这个jar,从空间个时间俩个角度来看。

  • 不设置依赖范围默认则compile
  • test,测试范围。在主程序和服务器不能用在。在开发时的测试程序中可以使用,如junit, 因为最终打成的jar包没有测试程序
  • provided:被服务器提供(不会被部署在服务器,最终这个jar包以tomcat的为准),如jsp-api,servlet-api,由tomcat提供。

测试依赖的传递性:
只有默认范围complie范围的jar才可以传递。

在maven-A工程里引入三种不同依赖范围的依赖,简写如下:

简写如下:       

   servlet-api
   provided



   druid



   junit
   test

在maven-web工程里引入maven-A工程的依赖


    com.atguigu.maven
    maven-A
    1.0-SNAPSHOT

效果如下:只有默认范围complie范围的jar才可以有依赖传递。


依赖冲突
路径最短者优先,路径相同者,先配置者优先

依赖排除
 不要设置版本号,只需要设置groupId和artifactId

        
            com.atguigu.maven
            maven-A
            1.0-SNAPSHOT
            
            
                
                    com.alibaba
                    druid
                
            
        

依赖排除后效果如下:


继承和聚合

什么叫聚合:对父工程的所有操作子工程也会跟着做相同的操作(比如清理、打包) ,此乃好处1.


父工程会自动聚合:
子工程maven_son会自动创建到父工程maven-A下,创建后父工程多了一个标签且把父工程打包方式设置为pom。

 如下创建maven-A的子工程maven_son

    com.atguigu.maven
    maven-A
    1.0-SNAPSHOT
    
    
        maven_son
    
    
    pom

子工程多了parent标签,里面写父工程的坐标
子工程groupid和version都保持跟父工程一样,所以子工程只写artifactId

    
        maven-A
        com.atguigu.maven
        1.0-SNAPSHOT
    
    4.0.0

    maven_son

这时候有什么好处呢?这是好处2

父工程会无条件把所依赖的所有jar包都继承给子工程【dependencies】
此时可以把任何依赖范围的jar都传下去。

子工程maven_son配置文件里啥都没写呢,就把父工程maven-A中的三种依赖范围的依赖都继承了!


dependecyMangement标签

 问题就来了,有时候我不想这样啊,把一堆我用不着的依赖也给我继承了下来。怎么办呢

让父工程管理依赖。

把父工程maven-A中的依赖用 包起来。

 这时候,子工程maven_son的依赖就这样了。就跟没有继承他爹一样

好处是:子工程可以选择性的继承父过程给的依赖,依赖范围和版本号就可以删掉不写了。

    
        
        
            javax.servlet
            servlet-api
        

        
        
            com.alibaba
            druid
        

    

此时虽然父工程中有3个依赖,但是子工程只选择性的继承了其中的俩个


 自定义属性来管理jar包的版本 

维护依赖也只能维护版本号,scope也能不改就别改,


5.3.1

比如spring系列jar包有很多个,设置版本号就可以这么使用,修改版本号的时候就可以一键修改了

${spring.version}

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/959769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号