0


在web 项目中的 maven

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>
标签: maven java

本文转载自: https://blog.csdn.net/weixin_66442229/article/details/142307678
版权归原作者 weixin_66442229 所有, 如有侵权,请联系我们删除。

“在web 项目中的 maven”的评论:

还没有评论