• 百日筑基第五天-关于maven


    百日筑基第五天-关于maven

    Maven 是什么

    Maven 是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),反映在配置中,就是一个 pom.xml 文件。是一组标准集合,一个项目的生命周期、一个依赖管理系统,另外还包括定义在项目生命周期阶段的插件(plugin)以及目标(goal)。

    当我们使用 Maven 的使用,通过一个自定义的项目对象模型,pom.xml 来详细描述我们自己的项目。

    Maven 中的有两大核心:

    • 依赖管理:对 jar 的统一管理(Maven 提供了一个 Maven 的中央仓库,当我们在项目中添加完依赖之后,Maven 会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题)
    • 项目构建:对项目进行编译、测试、打包、部署、上传到私服等

    Maven 是 Java 项目,因此必须先安装 JDK。

    Maven 中有一些常见的命令,如果使用 Eclipse 需要手动敲命令,如果使用 IDEA 的话,可以不用命令,直接点点点就可以了。

    常用命令中文含义说明
    mvn clean清理这个命令可以用来清理已经编译好的文件
    mvn compile编译将 Java 代码编译成 Class 文件
    mvn test测试项目测试
    mvn package打包根据用户的配置,将项目打成 jar 包或者 war 包
    mvn install安装手动向本地仓库安装一个 jar
    mvn deploy上传将 jar 上传到私服

    可以直接通过命令来构建一个 Maven 项目,不过在实际开发中,一般使用 Eclipse 或者 IDEA 就可以直接创建 Maven 项目了。

    创建命令:

    mvn archetype:generate -DgroupId=org.javaboy -DartifactId=firstapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    

    Maven 依赖管理

    Maven 项目,如果需要使用第三方的控件,都是通过依赖管理来完成的。这里用到的一个东西就是 pom.xml 文件,概念叫做项目对象模型(POM,Project Object Model),我们在 pom.xml 中定义了 Maven 项目的形式,所以,pom.xml 相当于是 Maven 项目的一个地图。就类似于 web.xml 文件用来描述三大 web 组件一样。

    Maven 坐标

    <dependencies>
      <dependency>
        <groupId>junitgroupId>
        <artifactId>junitartifactId>
        <version>4.11version>
        <scope>testscope>
      dependency>
    dependencies>
    
    • dependencies

    在 dependencies 标签中,添加项目需要的 jar 所对应的 maven 坐标。

    • dependency

    一个 dependency 标签表示一个坐标

    • groupId

    团体、公司、组织机构等等的唯一标识。团体标识的约定是它以创建这个项目的组织名称的逆向域名(例如 org.javaboy)开头。一个 Maven 坐标必须要包含 groupId。一些典型的 groupId 如 apache 的 groupId 是 org.apache.

    • artifactId

    artifactId 相当于在一个组织中项目的唯一标识符。

    • version

    一个项目的版本。一个项目的话,可能会有多个版本。如果是正在开发的项目,我们可以给版本号加上一个 SNAPSHOT,表示这是一个快照版(新建项目的默认版本号就是快照版)

    • scope

    表示依赖范围。

    我们添加了很多依赖,但是不同依赖的使用范围是不一样的。最典型的有两个,一个是数据库驱动,另一个是单元测试。

    数据库驱动,在使用的过程中,我们自己写代码,写的是 JDBC 代码,只有在项目运行时,才需要执行 MySQL 驱动中的代码。所以,MySQL 驱动这个依赖在添加到项目中之后,可以设置它的 scope 为 runtime,编译的时候不生效。

    单元测试,只在测试的时候生效,所以可以设置它的 scope 为 test,这样,当项目打包发布时,单元测试的依赖就不会跟着发布。

    冲突解决

    1. 先定义先使用
    2. 路径最近原则(直接声明使用)

    也可以手动控制。手动控制主要是通过排除依赖来实现,如下:

    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>5.1.9.RELEASEversion>
        <exclusions>
            <exclusion>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-coreartifactId>
            exclusion>
        exclusions>
    dependency>
    

    这个表示从 spring-context 中排除 spring-core 依赖。

  • 相关阅读:
    idea中maven plugin提示not found
    spfa判断负环的应用
    四类取整方式
    JVM中的堆的新生代、老年代、永久代
    带你玩转 Redis 的 SortedSet 数据类型
    【HMS Core】【FAQ】【AR Engine】AR Engine常见问题合集
    月销10万+!长城汽车全面发力“森林式生态体系”结硕果
    2022-07-21
    dp=[[0]*n]*m 和dp = [[0] * n for _ in range(m)]的区别是什么?
    系统架构30 - 质量属性
  • 原文地址:https://blog.csdn.net/qq_45477639/article/details/140054867