当前位置 > it书童 > java > 正文

maven 进阶

java it书童 2021-02-02 11:35:35 0赞 0踩 95阅读 0评论

maven是一个项目管理工具。主要有两大功能:

  • 依赖管理

maven对项目中jar包的管理过程。传统工程我们直接把jar包放置在项目中。maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。

  • 一键构建

maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作

仓库的种类

  • 本地仓库

  • 远程仓库【私服】

  • 中央仓库

仓库之间的关系:当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对应jar包。

默认情况下,如果本地仓库没有对应jar包,maven工程会自动去中央仓库下载jar包到本地仓库。

在公司中,如果本地没有对应jar包,会先从私服下载jar包,

如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。

maven常用命令:clean,compile,test,package,install,deploy。

maven三套生命周期:清理生命周期,默认生命周期,站点生命周期。

直接依赖与传递依赖

maven 工程要导入 jar 包的坐标,必须要考虑解决 jar 包冲突

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>

不同的导入顺序,结果并不同

直接依赖:项目中直接导入的 jar 包,就是该项目的直接依赖包

如上面的 pom 表示,项目直接依赖于 spring-beansspring-context

传递依赖:项目中没有直接导入的 jar 包,可以通过项目直接依赖的 jar 包传递到项目中

如:spring-core 是由 spring-beansspring-context 传递进来的

解决 jar 包冲突的方式

  • 第一声明优先原则

哪个 jar 包的坐标在靠上的位置,这个 jar 包就是先声明的,先声明的 jar 包坐标下的依赖包,可以优先进入项目中

  • 路径近者优先原则

直接依赖路径比传递依赖路径近,如果直接依赖与传递依赖两者并存,选择直接依赖

  • 直接排除法(推荐)

当我们要排除某个 jar 包下依赖包,在配置 exclusioins 标签时,内部可以不写版本号

idea 插件

生产环境可以用 mvn dependency:tree -Dverbose 定位 jar 包冲突

锁定版本

锁定版本法可以打破2个依赖传递的原则,优先级为最高

<!-- 统一管理jar包版本 -->
<properties>
    <spring.version>5.0.2.RELEASE</spring.version>
</properties>

<!-- 锁定jar包版本 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

拆分与聚合

工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目

工程天生只能使用自己内部资源,工程是独立的。也可以和其他工程或模块建立关联关系

模块不是独立的,属于父工程,模块一旦创建,所有父工程的资源都可以使用

子模块之间默认是没有任何关系的

父子工程不用建立关系,继承关系是默认的,不需要手动建立

平级直接的引用叫依赖,依赖是需要手动建立的

参考

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/1032