当前位置:首页 » 《资源分享》 » 正文

在web 项目中的 maven

17 人参与  2024年09月24日 12:01  分类 : 《资源分享》  评论

点击全文阅读


Maven 是什么?

maven 是 一个包管理工具,主要是解决 传统项目在构建大项目(整合多个框架)时,发生jar包冲突(依赖冲突),多人协同开发(jar包的更新,与发布繁琐)

maven

lib 目录管理

web 项目中使用 maven

有两种方式第一种 是使用 maven模板 创建web 项目(步骤: 左边导航栏选MavenArchetype,在Archetype选择 webapp 这个模板 )

第一种的话里面的模板 比较久了,需要去改web.xml的版本(或者直接删了导入新的web.xml)

第二种就是创建一个普通的maven 项目 然后添加 web框架(跟着 maven web模板 去对比调整目录位置、名称什么的),因为 maven 底层 就是按着那套设置 来运行的(读入web)

直接给项目添加 web 框架 后的目录(这样是不行的,)

改动

没有这样设置会出现的情况就是,web.xml 没有被在 target目录,或者是整个web 项目无法运行(项目可以启动,但是因为web.xml 的配置没有被读取,所以相当于运行了一个空壳的tomcat )

好用的终端命令行

        控制台  mvn clean install -X   (清除 并 安装)查看maven 构建的细节 

关于maven 中添加web 框架支持 的踩坑

maven 中的构建配置问题
        需要去看maven 整个构建流程 是否成功,有无警告
    需要按照 maven给定 的 maven - web 的模板去配置,maven才会自动
    去读取web框架模块
        将web 改成 webapp 且 放在main下与java ,resource同级目录
    修改后需要去删除之前的 MANIFEST.MF ,让maven重新导入
    每次重新编译时,要使用clean 插件将target清除掉,或者手动删除


在pom.xml maven的配置文件上
    一定需要配置java 的jdk
        不然(可能)会报错 不支持发行版本

Maven不只是导入依赖工具

Maven的生命周期

是需要去了解Maven的生命周期,才能更好的来解决(应付)这些报错。

compile    编译
    验证程序的正确性
    本地仓库中没有的jar包下载 ----> 中央仓库
    本地仓库中有的jar包 -----> 本地仓库
    生成target目录(是每次编译的产物)
        classes
        generate-sources
        生成相关的字节码

Maven打包
    前面的步骤都会在跑一遍
    出现一个项目的jar或者war包 (web 项目打包成 war 包 )

install
    将项目生成的包 保存到本地仓库

插件
    clean ----- 清除target 产出的文件

依赖的范围

        <scope> 标签就是控制依赖的范围,默认(没有 <scope> 时)的依赖范围时编译。依赖范围的设置是影响到后续的打包运行操作的。

<!-- https://mvnrepository.com/artifact/org.springframework/spring-test --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-test</artifactId>    <version>6.0.0</version>    <scope>test</scope></dependency>

依赖范围 compile (编译)  编译时就需要,最终需要被打包

依赖范围 provided  (已提供)编译和测试阶段需要该依赖,运行时环境已经提供了这个依赖,最终不需要被打包。

依赖范围 test  只做测试编译,不打包

依赖范围 runtime(运行时)编译时不需要,但在测试和运行时需要,最终需要被打包

依赖管理

依赖继承(父子工程)
        父工程中 会是使用 properties 标签进行属性配置,来统一管理依赖版本
        在子工程的pom.xml中 使用<parent></parent> 引用父工程的pom
        继承之后需要依赖还是得去导入,只不过导入的是父工程的,如果父工程没有,则报错

<parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.2.6.RELEASE</version>    </parent>

    依赖传递
        看springboot 整合包有多层依赖----所有上层依赖项,都要依赖于基层依赖项
    依赖的排出
        主要是对于  一些基层的依赖项与 其他的依赖项 有冲突或者不兼容时 使用
        对于这个印象比较深刻的就是
        做springboot 3 与mybatis 整合时会出现 因为mybatis 中的mysql-connector-j 版本太低(2.8)与spring boot不兼容

(AI 生成的例子)

<dependency>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-web</artifactId>          <exclusions>              <!-- 排除 Tomcat 相关的依赖 -->              <exclusion>                  <groupId>org.springframework.boot</groupId>                  <artifactId>spring-boot-starter-tomcat</artifactId>              </exclusion>          </exclusions>      </dependency>        <!-- 添加 Jetty 作为嵌入式服务器 -->      <dependency>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-jetty</artifactId>      </dependency>    

依赖的选择(A为项目)
        长度不同,短路优先
            A --> B --> C---->D
            A--->D
        长度相同,先声明优先
父工程依赖的引入( 就是不需要去声明版本 ,在父工程声明并管理 )

<dependencies>    <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter</artifactId>    </dependency></dependencies>


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/163888.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1